166. 分数到小数
给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以 字符串形式返回小数 。
如果小数部分为循环小数,则将循环的部分括在括号内。
如果存在多个答案,只需返回 任意一个 。
对于所有给定的输入,保证 答案字符串的长度小于 104 。
解析
我们利用map来存储被除数的结果开始位置即可。
class Solution {
public String fractionToDecimal(int numerator, int denominator) {
StringBuilder sb = new StringBuilder();
long a = numerator, b = denominator;
if (a > 0 && b < 0 || a < 0 && b > 0) sb.append('-');
a = Math.abs(a);
b = Math.abs(b);
sb.append(a / b);
if (a % b == 0) return sb.toString();
sb.append('.');
Map<Long, Integer> map = new HashMap<>();
while ((a = (a % b) * 10) > 0 && !map.containsKey(a)) {
map.put(a, sb.length());
sb.append(a / b);
}
if (a == 0) return sb.toString();
return sb.insert(map.get(a).intValue(), '(').append(')').toString();
}
}
注意:本文归作者所有,未经作者允许,不得转载