参考: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; } };