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 = 2, denominator = 3, return "0.(6)".
Hint:
- No scary math, just apply elementary math knowledge. Still remember how to perform a long division?
- Try a long division on 4/9, the repeating part is obvious. Now try 4/333. Do you see a pattern?
- Be wary of edge cases! List out as many test cases as you can think of and test your code thoroughly.
Credits:
Special thanks to @Shangrila for adding this problem and creating all test cases.
class Solution {
public:
string fractionToDecimal(int numerator, int denominator) {
if (numerator == 0) return"0";
string res;
if (numerator < 0 ^ denominator < 0) res += '-';
long long n = numerator;
n=abs(n);
long long d = denominator;
d=abs(d);
long long integer = n / d;
res += to_string(integer);
long long r = n%d;
if (r != 0){
res += '.';
}
else{
return res;
}
map<long long, int> m;
while (r){
if (m.count(r)){
res.insert(m[r], "(");
res += ')';
break;
}
m[r] = res.size();//记录出现该余数的位置
r *= 10;
res += to_string(r / d);
r = r%d;
}
return res;
}
};