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)".
大意为:
输入一个除数和被除数,如果能够整除就直接除数该整数,若是有限小数则完整输出该小数,若为无限循环小数则输出的格式为"0.(循环的数字)"
解题思路:
说说本人的解题思考吧,一开始绕了一下弯路,撞了一下壁2333。首先确定有3种情况发生,可以整除,不可以整除但是有限小数,不可以整除并且是无限循环小数,其他还有限定的条件,如正负数,为0什么的,其实步骤是一样的,只是想读者能够正确了解有什么情况会发生到。
附上代码:
StringBuffer buffer = new StringBuffer();
if (numerator == 0) {
return "0";
} else {
buffer.append(((numerator > 0) ^ (denominator > 0)) ? "-" : "");
long nume = Math.abs((long) numerator);
long den = Math.abs((long) denominator);
buffer.append(nume / den);
if (numerator % denominator != 0) {
buffer.append(".");
}
HashMap
map = new HashMap<>();
long num = nume % den;
map.put(num, buffer.length());
while (num != 0) {
num *= 10;
buffer.append(num / den);
num %= den;
if (map.containsKey(num)) {
int index = map.get(num);
buffer.insert(index, "(");
buffer.append(")");
break;
// int index=buffer.indexOf(".")+1;
// buffer.deleteCharAt(buffer.length()-1);
}
map.put(num, buffer.length());
}
return buffer.toString();
}