Fraction to Recurring Decimal

Desicription

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.

Example 1:

1
2
Input: numerator = 1, denominator = 2
Output: "0.5"

Example 2:

1
2
Input: numerator = 2, denominator = 1
Output: "2"

Example 3:

1
2
Input: numerator = 2, denominator = 3
Output: "0.(6)"

Solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Solution {
public:
string fractionToDecimal(long long numerator, long long denominator) {
if(numerator == 0)
return "0";
string res;
if(numerator < 0 ^ denominator < 0)
res += "-";
numerator = abs(numerator);
denominator = abs(denominator);
res += to_string(numerator / denominator);
if(numerator % denominator == 0)
return res;
res += ".";
unordered_map<long long, long long> mp;
for(long long r = numerator % denominator; r; r %= denominator) {
if(mp.count(r)) {
res.insert(mp[r], 1, '(');
res += ")";
return res;
}
mp[r] = res.size();
r *= 10;
res += to_string(r / denominator);
}
return res;
}
};