首页 > 其他 > 详细

166.Fraction to Recurring Decimal

时间:2019-04-12 10:14:52      阅读:135      评论:0      收藏:0      [点我收藏+]
class Solution {
public:
    string fractionToDecimal(int numerator, int denominator) {
        if(numerator==0) return "0";
        string result;
        if(numerator<0 ^ denominator<0 ) result+='-';   //异或,numerator<0和denominator<0仅有一个为真
        //转化为正数,INT_MIN转化为正数会溢出,故用long long。long long int n=abs(INT_MIN)得到的n仍然是负的,所以写成下面的形式。
        long long int n=numerator,d=denominator;
        n=abs(n);d=abs(d);              
        
        result+=to_string(n/d);  //整数部分
        long long int r=n%d;    //余数r
        if(r==0) return result;
        else result+='.';
        //下面处理小数部分,用哈希表
        unordered_map<int,int> map;
        while(r){
            //检查余数r是否在哈希表中,是的话则开始循环了
            if(map.find(r)!=map.end()){
                result.insert(map[r],1,'(');   //http://www.cplusplus.com/reference/string/basic_string/insert/
                result+=')';
                break;
            }
            map[r]=result.size();    //这个余数对应于result的哪个位置
            //正常运算
            r*=10;
            result+=to_string(r/d);
            r=r%d;
        }
        return result;
    }
};

166.Fraction to Recurring Decimal

原文:https://www.cnblogs.com/smallredness/p/10694100.html

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