细节题,余数出现相同时即循环节。代码如下:
string fractionToDecimal(int numerator, int denominator) {
int flag = 1;
long long lnum = numerator, lden = denominator;
if(numerator < 0){
lnum = abs((long long)numerator);
flag *= -1;
}
if(denominator < 0){
lden = abs((long long)denominator);
flag *= -1;
}
string result = to_string(lnum / lden);
if(flag == -1 && lnum != 0)
result = "-" + result;
long long left = lnum % lden;
if(left == 0)
return result;
result += ".";
int length = result.length();
unordered_map<long long, int> index;
index[left] = 0;
for(int i = 1;i <= lden; ++i){
left *= 10;
long long re = left/lden;
left %= lden;
result += to_string(re);
if(left == 0)
return result;
if(re == 0)
continue;
if(index.find(left) != index.end()){
result.insert(length + index[left], "(");
result += ')';
return result;
}
index[left] = i;
}
}