166. Fraction to Recurring Decimal
class Solution {
public String fractionToDecimal(int numerator, int denominator) {
if (numerator == 0) {
return "0";
}
StringBuilder sb = new StringBuilder();
if ((numerator < 0) ^ (denominator < 0)) {
sb.append("-");
}
// Convert to Long or else abs(-2147483648) overflows
long numeratorL = Math.abs(Long.valueOf(numerator));
long denominatorL = Math.abs(Long.valueOf(denominator));
long quotient = numeratorL / denominatorL;
sb.append(quotient);
long remainder = numeratorL % denominatorL;
if (remainder == 0) {
return sb.toString();
}
sb.append(".");
Map<Long, Integer> map = new HashMap<>();
while (remainder != 0) {
if (map.containsKey(remainder)) {
sb.insert(map.get(remainder), "(");
sb.append(")");
break;
}
map.put(remainder, sb.length());
remainder = remainder * 10;
quotient = remainder / denominatorL;
remainder = remainder % denominatorL;
sb.append(quotient);
}
return sb.toString();
}
}