leetcode 166 Fraction to Recurring Decimal

参考:https://www.cnblogs.com/grandyang/p/4238577.html

unordered_map<int,int> m: 余数到该余数对应的商在string中的映射;如果该余数已经出现过,说明开始循环了,在该余数对应的商前加上"(",在string的最后加上")",结束循环。

注意,int的范围为:-214748648~2147483647

class Solution {
public:
    string fractionToDecimal(int numerator, int denominator) {
        string re;
        int sig1=numerator>0?1:-1,sig2=denominator>0?1:-1;
        long long num=abs(numerator),den=abs(denominator);
        unordered_map<int,int> m;
        long long div=num/den,rem=num%den;
        if(sig1*sig2==-1&&(div>0||rem>0)) {re+='-';}
        re+=to_string(div);
        if(rem>0) re+='.';
        string s;int pos=0;
        while(rem) {
            if(m.find(rem)!=m.end()) {
                s.insert(m[rem],"(");
                s+=')';
                return re+s;
            }
            m[rem]=pos++;
            s+=to_string((rem*10)/den);
            rem=(rem*10)%den;
        }
        return re+s;
    }
};
原文地址:https://www.cnblogs.com/LiuQiujie/p/12566890.html