給定分子 numerator 和分母 denominator,返回小數字符串。若小數部分循環,用括號標記循環節。
"0.5""2""0.(6)"long long 防溢出,如 -2147483648)unordered_map<long, int> 記錄「餘數 → 在結果字符串中的位置」INT_MIN 取絕對值會溢出,必須用 64 位有符號整數insert(pos, "(") 和 push_back(')')class Solution {
public:
string fractionToDecimal(int numerator, int denominator) {
if (numerator == 0) return "0";
long long n = numerator, d = denominator;
string res;
if ((n < 0) ^ (d < 0)) res += '-';
n = llabs(n); d = llabs(d);
res += to_string(n / d);
n %= d;
if (n == 0) return res;
res += '.';
unordered_map<long long, int> pos;
while (n) {
if (pos.count(n)) {
res.insert(pos[n], "(");
res += ')';
break;
}
pos[n] = res.size();
n *= 10;
res += char('0' + n / d);
n %= d;
}
return res;
}
};