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)".
// int64_t for long data type
// unordered_map
string num2str(int64_t n){
stringstream ss;
ss<<n;
return ss.str();
}
class Solution {
public:
string fractionToDecimal(int64_t numerator, int64_t denominator) {
if(!numerator) return "0";
string res="";
if((numerator<0)^(denominator<0)) res+='-';
int64_t n=abs(numerator);
int64_t d=abs(denominator);
res+=num2str(n/d);
if(n%d==0) return res;
res+='.';
unordered_map<int64_t,int64_t> m;
for(int64_t r=n%d;r;r%=d){
if(m.count(r)){
res.insert(m[r],1,'(');
res+=')';
break;
}
m[r]=res.size();
r*=10;
res+=num2str(r/d);
}
return res;
}
};