跳到主要内容

166 分数到小数

https://leetcode.cn/leetbook/read/top-interview-questions-medium/xwm8ne/

cost: 17m05s

class Solution {
public:
string fractionToDecimal(int numerator, int denominator) {
return this->fractionToDecimal_(numerator, denominator);
}

private:
string fractionToDecimal_(long numerator, long denominator) {
string s = "";
long r = numerator / denominator;
if (r == 0 && ((numerator < 0 && denominator > 0) ||
(numerator > 0 && denominator < 0))) {
s += "-";
}
s += to_string(r);
if (numerator % denominator == 0) {
return s;
}
s += ".";
string s2 = "";
numerator %= denominator;
unordered_map<long, long> m;
while (numerator != 0) {
if (m.count(numerator)) {
long i = m[numerator];
s += s2.substr(0, i) + "(" + s2.substr(i) + ")";
return s;
}
m[numerator] = s2.size();
long tmp = numerator * 10 / denominator;
s2 += to_string(tmp < 0 ? -tmp : tmp);
numerator = numerator * 10 % denominator;
}
return s + s2;
}
};