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)".
Credits:
Special thanks to @Shangrila for adding this problem and creating all test cases
class Solution {
public String fractionToDecimal(int numerator, int denominator) {
int sign = 0;
StringBuilder result = new StringBuilder();
if ((numerator > 0&&denominator > 0)||(numerator < 0&&denominator < 0)){
sign = 1;
}
else if (numerator != 0){
sign = -1;
result.append("-");
}
long num = (long)Math.abs((long)numerator);
long den = (long)Math.abs((long)denominator);
result.append(num/den);
num = num%den;
if ((num) == 0){
return new String(result);
}
result.append(".");
Map<Integer, Integer> map = new HashMap<>();
map.put((int)num, result.length());
while (num != 0){
num *= 10;
result.append(num/den);
num = num%den;
if (map.containsKey((int)num)){
int index = map.get((int)num);
result.insert(index, '(');
result.append(")");
break;
}
else {
map.put((int)num, result.length());
}
}
return new String(result);
}
}