题目
代码(首刷看解析)
模拟除法运算,一步步来,be patient
class Solution {
public:
string fractionToDecimal(int numerator, int denominator) {
long numeratorLong = numerator, denominatorLong = denominator;
if(numeratorLong % denominatorLong == 0)
return to_string(numeratorLong / denominatorLong);
string res;
// 符号
if(numeratorLong < 0 ^ denominatorLong < 0)
res.push_back('-');
// 整数
numeratorLong = abs(numeratorLong);
denominatorLong = abs(denominatorLong);
long interPart = numeratorLong / denominatorLong;
res += to_string(interPart);
res.push_back('.');
// 小数
long remainder = numeratorLong % denominatorLong;
string fractionPart;
unordered_map<long, int> remainderIndexMap;
int index = 0;
while(remainder && !remainderIndexMap.count(remainder)) {
remainderIndexMap[remainder] = index++;
remainder *= 10;
fractionPart += to_string(remainder / denominatorLong);
remainder %= denominatorLong;
}
if(remainder) { // 循环
fractionPart.insert(remainderIndexMap[remainder], "(");
fractionPart += ')';
}
res += fractionPart;
return res;
}
};