Given two integers representing the numerator and denominator of a fraction, return the fraction in string format. If the fractional part is repeating, enclose the repeating part in parentheses. For example,
Given numerator = 1, denominator = 2, return "0.5".
Given numerator = 2, denominator = 1, return "2".
Given numerator = 1, denominator = 2, return "0.5".
Given numerator = 2, denominator = 1, return "2".
Given numerator = 2, denominator = 3, return "0.(6)".
代码:
class Solution {
public:
string fractionToDecimal(int numerator, int denominator) {
if (numerator == 0)
return "0";
if (denominator == 0)
return "";
string result = "";
// is result is negative
if ((numerator < 0) ^ (denominator < 0)) {
result += "-";
}
// convert int to long
long num = numerator, den = denominator;
num = abs(num);
den = abs(den);
// quotient
long res = num / den;
result += to_string(res);
// if remainder is 0, return result
long remainder = (num % den) * 10;
if (remainder == 0)
return result;
// right-hand side of decimal point
map<long, int> map;
result += ".";
while (remainder != 0) {
// if digits repeat
if (map.find(remainder)!=map.end()) {
int beg = map[remainder];
string part1 = result.substr(0, beg);
string part2 = result.substr(beg, result.length());
result = part1 + "(" + part2 + ")";
return result;
}
// continue
map.insert( pair<long,int>( remainder, result.length()) );
res = remainder / den;
result += to_string(res);
remainder = (remainder % den) * 10;
}
return result;
}
};