Fraction to recurring decimal
来源:互联网 发布:苹果7mac地址 编辑:程序博客网 时间:2024/05/21 22:44
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)".
解题思路:
1. 对于整数部分,只需要直接做除法
2. 对于小数部分,维护一个List 和Map,List用于记录对于每一个小数位置得到的结果;Map用于记录对于每一个remainder,他的出现位置对应于List的index
3. while循环,如果remainder== 0,循环终止,不出现循环小数,直接把list的数字append到结果上
4. 如果当前remainder在map中出现过,说明循环开始。拿到当前remainder第一次出现的位置,加上“(”然后append接下来list中的所有数字。
几个edge case:
1. 正负号(这个比较容易实现,唯一的状况是被除数是0的情况)
2. Integer.MIN_VALUE,这个如果取绝对值就变成0,所以目前比较方便的做法是cast成长整形。如divide two integers的做法应该还有更好的办法
public String fractionToDecimal(int numerator, int denominator) { if (numerator == 0) { return "0"; } int sign = ((numerator ^ denominator)>>>31 & 1) == 1 ? -1 : 1; long num = (long) numerator; long den = (long) denominator; num = Math.abs(num); den = Math.abs(den); StringBuilder builder = new StringBuilder(); if (sign < 0) { builder.append("-"); } builder.append(num/den); long remainder = num % den; if (remainder > 0) { builder.append("."); } else { return builder.toString(); } List<Long> list = new ArrayList<Long>(); int ind = 0; Map<Long, Integer> map = new HashMap<Long, Integer>(); while (remainder > 0) { if (map.containsKey(remainder)) { int startInd = map.get(remainder); for (int i = 0; i < startInd; i++) { builder.append(list.get(i)); } builder.append("("); for (int i = startInd; i < list.size(); i++) { builder.append(list.get(i)); } builder.append(")"); break; } else { long q = remainder * 10 / den; System.out.println(q); map.put(remainder, ind); list.add(q); ind++; remainder = remainder * 10 % den; } } if (remainder == 0) { for (long i : list) { builder.append(i); } } return builder.toString(); }
0 0
- Fraction to Recurring Decimal
- Fraction to Recurring Decimal
- Fraction to Recurring Decimal
- Fraction to recurring decimal
- Fraction to Recurring Decimal
- Fraction to Recurring Decimal
- Fraction to Recurring Decimal
- Fraction to Recurring Decimal
- Fraction to Recurring Decimal
- Fraction to Recurring Decimal
- Fraction to Recurring Decimal
- Fraction to Recurring Decimal
- Fraction to Recurring Decimal
- Fraction to Recurring Decimal
- Fraction to Recurring Decimal
- Fraction to Recurring Decimal
- Fraction to Recurring Decimal
- Fraction to Recurring Decimal
- Leetcode[Easy] - Remove Nth Node From End of List
- LeetCode(82) Largest Rectangle in Histogram
- 班主任联合家长群推进高中生德育教育
- Leetcode[Easy] -- Roman to Integer
- OJ刷题之《矩形转置》
- Fraction to recurring decimal
- 南阳理工 64 鸡兔同笼
- C++之父谈关于C++的五个需要被重新认识的观点(上)(涨知识了)
- C++之父谈关于C++的五个需要被重新认识的观点(中)(有用)
- MATLAB回归分析
- WPF 学习网址
- 南阳理工 65 另一种阶乘问题
- OJ题——求两个数的最大公约数与最小公倍数
- OJ题——水仙花数(各位数的立方等于原数的数)