string fractionToDecimal(int numerator, int denominator) {
if (numerator == 0) return "0";
long long num = abs((long long)numerator);
long long den = abs((long long)denominator);
long long out = num / den;
long long rem = num % den;
unordered_map<long long, int> mp;
string res = ((numerator > 0) ^ (denominator > 0)) ? "-" : "";
res += to_string(out);
if (rem == 0) return res;
res += ".";
string s;
int pos = 0;
while (rem != 0) {
if (mp.count(rem)) {
s.insert(mp[rem], "(");
s += ")";
return res + s;
}
mp[rem] = pos;
s += to_string((rem * 10) / den);
rem = (rem * 10) % den;
++pos;
}
return res + s;
}
string fractionToDecimal(int numerator, int denominator) {
if (numerator == 0) return "0";
string res = ((numerator > 0) ^ (denominator > 0)) ? "-" : "";
long long num = abs((long long)numerator);
long long den = abs((long long)denominator);
// integral
res += to_string(num / den);
num %= den;
if (num == 0) return res;
// fractional
res += ".";
unordered_map<long long, int> mp;
mp[num] = res.length();
while (num) {
num *= 10;
res += to_string(num / den);
num %= den;
if (mp.count(num)) {
int pos = mp[num];
res.insert(pos, "(");
res += ")";
break;
} else {
mp[num] = res.length();
}
}
return res;
}