166.分数到小数
给定两个整数,分别表示分数的分子 numerator
和分母 denominator
,以 字符串形式返回小数 。
如果小数部分为循环小数,则将循环的部分括在括号内。
如果存在多个答案,只需返回 任意一个 。
对于所有给定的输入,保证 答案字符串的长度小于 104
。
示例 1:
1 2
| 输入:numerator = 1, denominator = 2 输出:"0.5"
|
示例 2:
1 2
| 输入:numerator = 2, denominator = 1 输出:"2"
|
示例 3:
1 2
| 输入:numerator = 4, denominator = 333 输出:"0.(012)"
|
Solution
模拟竖式运算
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| class Solution { public String fractionToDecimal(int numerator, int denominator) { StringBuilder sb = new StringBuilder(); Map<Long, Integer> map = new HashMap<>(); long a = numerator, b = denominator; if (a * 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('.'); 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(); } }
|