关键:
小数部分如果余数重复出现两次就表示该小数是循环小数。
1.转换为long long防止溢出
2.处理正负号,一正一负取负号,分子分母全部转换为正数
3.获得小数点的下标,出现循环余数,我们直接在重复数字前面添加’(’,字符串末尾添加’)’
4.map用来记录出现重复数的下标,然后将’('插入到重复数前面
class Solution {
public:
string fractionToDecimal(int numerator, int denominator) {
if (numerator==0)
return "0";
long long n=static_cast<long long>(numerator);
long long d=static_cast<long long>(denominator);
string ans="";
if ((n<0&&d>0)||(n>0&&d<0))
ans.push_back('-');
n=abs(n);
d=abs(d);
ans.append(to_string(n/d));
n=n%d;
if(n==0)
return ans;
ans.push_back('.');
int index=ans.size()-1;
unordered_map<int ,int> mp;
while(n&&mp.count(n)==0){
mp[n]=++index;
n*=10;
ans+=to_string(n/d);
n%=d;
}
if (mp.count(n)==1){
ans.insert(mp[n],"(");
ans.push_back(')');
}
return ans;
}
};