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)".
class Solution {
public:
string fractionToDecimal(int numerator, int denominator) {
string ans = "";
long long nume = numerator;
long long deno = denominator;
if(denominator == 0)return ans;
if(numerator == 0) return "0";
if(denominator < 0 ^ numerator < 0) {
ans += '-';
nume = abs(nume);
deno = abs(deno);
}
ans += to_string(nume / deno);
long long rem = nume % deno * 10;
if(rem == 0) return ans;
ans += '.';
map<long long,int> m;
long long res = 0;
while(rem){
if(m.find(rem) != m.end()){
int begin = m[rem];
string s1 = ans.substr(0,begin);
string s2 = ans.substr(begin);
ans = s1 + '(' + s2 + ')';
break;
}
m[rem] = ans.length();
res = rem / deno;
ans += to_string(res);
rem = rem % deno * 10;
}
return ans;
}
};