首页 > 其他 > 详细

leetcode_33【数学】---- 分数到小数

时间:2020-05-11 10:05:13      阅读:79      评论:0      收藏:0      [点我收藏+]

给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数。

如果小数部分为循环小数,则将循环的部分括在括号内。

示例 1:

输入: numerator = 1, denominator = 2
输出: "0.5"

示例 2:

输入: numerator = 2, denominator = 1
输出: "2"

示例 3:

输入: numerator = 2, denominator = 3
输出: "0.(6)"

思路:长除法
解答(C++):
class Solution {
public:
    string fractionToDecimal(int numerator, int denominator) {
         string res;
        // 分母为0
        if(denominator == 0) return res;
        // 转换分子分母的格式
        long long num = static_cast<long long>(numerator);
        long long denom = static_cast<long long>(denominator);
        // 负号形式
        if((num*denom) < 0) res+="-";
        // 处理负号
        num = abs(num);
        denom = abs(denom);
        
        // 处理整数部分
        res += to_string(num/denom);
        // 处理小数部分
        num %= denom;
        if(num) res += ".";
        // 利用hash表定位出现过的除数从而定位循环
        unordered_map<long long,int> map;
        int index = 0;
        while(num && map.find(num) == map.end()){
            map[num] = index++;
            num *= 10;
            res += to_string(num/denom);
            num %= denom;
        }
        // 出现循环小数
        if(map.find(num) != map.end()){
            res += "()";
            int cur = res.size()-2;
            while(index-- > map[num]){
                swap(res[cur],res[cur-1]);
                --cur;
            }
        }
        // 返回结果
        return res;    
    }
};

 

leetcode_33【数学】---- 分数到小数

原文:https://www.cnblogs.com/vczf/p/12867072.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!