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:
/*algorithm
hash solution to store <n,index> mapping
*/
string fractionToDecimal(int numerator, int denominator) {
bool ne= (numerator >> 31) ^ (denominator >> 31);
long n = abs(numerator),d = abs(denominator);
if(n == 0)return "0";
unordered_map<int,int>table;//<n,index> mapping
string s;
int cnt = 0;
for(;n&&!table.count(n);n = (n%d)*10){
++cnt;
if(cnt==2)s.append(".");
s.append(to_string(abs(n/d)));
table[n]=s.size()-1;
}
if(table[n] > 1){
s.insert(table[n],"(");
s.append(")");
}
if(ne)s.insert(0,"-");
return s;
}
};