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.
class Solution {
public String fractionToDecimal(int numerator, int denominator) {
if (numerator == 0 || denominator == 1) {
return String.valueOf(numerator);
}
StringBuilder res = new StringBuilder();
if (numerator > 0 && denominator < 0 || numerator < 0 && denominator > 0) {
res.append("-");
}
long dividend = Math.abs((long)numerator);
long divisor = Math.abs((long)denominator);
//Integer Part
res.append(dividend / divisor);
dividend %= divisor;
if (dividend == 0) {
return res.toString();
}
// Fration Part
res.append(".");
Map<Long, Integer> map = new HashMap<>();
while (dividend != 0) {
if (map.containsKey(dividend)) {
int index = map.get(dividend);
res.insert(index, "(");
res.append(")");
break;
}
map.put(dividend, res.length());
dividend *= 10;
res.append(dividend / divisor);
dividend %= divisor;
}
return res.toString();
}
}