给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数。
如果小数部分为循环小数,则将循环的部分括在括号内。
示例 1:
输入: numerator = 1, denominator = 2
输出: "0.5"
示例 2:
输入: numerator = 2, denominator = 1
输出: "2"
示例 3:
输入: numerator = 2, denominator = 3
输出: "0.(6)"
class Solution {
public:
string fractionToDecimal(int numerator, int denominator) {
if (numerator == 0)
return "0";
string ans;
if (numerator < 0 ^ denominator < 0)
ans += "-";
long longNumerator = numerator;
long longDenominator = denominator;
longNumerator = longNumerator < 0 ? -longNumerator : longNumerator;
longDenominator = longDenominator < 0 ? -longDenominator : longDenominator;
ans += to_string(longNumerator / longDenominator);
longNumerator %= longDenominator;
if (longNumerator == 0)
return ans;
ans += ".";
int reminder;
map<int, int> appeared;
while (longNumerator)
{
if (appeared.find(longNumerator) != appeared.end())
{
ans.insert(appeared[longNumerator], "(");
ans += ')';
break;
}
appeared[longNumerator] = ans.length();
ans += to_string(longNumerator * 10 / longDenominator);
longNumerator = longNumerator * 10 % longDenominator;
}
return ans;
}
};