LeetCode Fraction to Recurring Decimal
来源:互联网 发布:wish产品优化 编辑:程序博客网 时间:2024/05/22 05:05
lz才发现原来LeetCode的题目是会更新的,不错啊~
不过中间有几个大了标记的题目,点进去之后没有办法阅读题目,略蛋碎(ms要买什么书?,大家有好的解决方法求教)
回到这道题目,给出两个数字,分母和分子,求这个结果。结果要求:循环的数字要将循环节用括号包起来。
先说几点:
1、能够被整出的,要求分子分母divide greatest common dividor,分母的因子只有2和5,那么就是可以除尽的;否则就是无限循环,不可能是无限不循环(无理数了)。
2、判断无限循环的循环节,将分子不断*10,再找分母取模,当模数一样的时候,就是循环节
3、想法对了,但是这个精度和边界差点弄死我了……虽说给的是int,但是要考虑到long,然后去了倒数的话,Integer.MIN_VALUE的是超过double的精度的,要么循环暴力,好么就直接BigDecimal……为了做这个题目,也是很拼的……
import java.math.BigDecimal;import java.text.DecimalFormat;import java.text.NumberFormat;import java.util.HashMap;public class Fraction_to_Recurring_Decimal {public static String fractionToDecimal(int a, int b) {long numerator = a;long denominator = b;if (numerator % denominator == 0)return (numerator / denominator) + "";String temp;DecimalFormat format = (DecimalFormat) NumberFormat.getPercentInstance();format.applyPattern("#.###########################################");String ret = "";if (numerator * denominator < 0) {System.out.println(numerator + " " + denominator);ret = "-";if (numerator < 0)numerator = -numerator;elsedenominator = -denominator;} else if (numerator < 0) {numerator = -numerator;denominator = -denominator;}long gcd = getGCD(numerator, denominator);numerator = numerator / gcd;denominator = denominator / gcd;long num = denominator;while (num % 2 == 0)num /= 2;while (num % 5 == 0)num /= 5;if (num == 1) {BigDecimal bdNum = new BigDecimal(numerator);BigDecimal bdDeno = new BigDecimal(denominator);return ret + format.format(bdNum.divide(bdDeno));} else {long quotient = numerator / denominator;long mod = numerator % denominator;double d;int index = 0;HashMap<Long, Integer> map = new HashMap();String current = "";while (true) {if (map.containsKey(mod)) {int n = map.get(mod);return ret + quotient + "." + current.substring(0, n) + "("+ current.substring(n) + ")";}// System.out.println((1.0 * mod / denominator - mod// / denominator));d = 1.0 * mod / denominator - mod / denominator;temp = format.format(d);current = current + temp.charAt(2);map.put(mod, index);mod = mod * 10 % denominator;index++;}}}public static long getGCD(long a, long b) {long r;if (a > b) {r = a;a = b;b = r;}while (b != 0) {r = b;b = a % b;a = r;}return a;}public static void main(String[] args) {System.out.println(fractionToDecimal(1, 6));// System.out.println(fractionToDecimal(1, 214748364));System.out.println(fractionToDecimal(-1, -2147483648));// System.out.println((1.0 * 1l / 2147483648l));}}
0 0
- [leetcode] Fraction to Recurring Decimal
- LeetCode Fraction to Recurring Decimal
- Fraction to Recurring Decimal leetcode
- leetcode:Fraction to Recurring Decimal
- [LeetCode] Fraction to Recurring Decimal
- [leetCode] Fraction to Recurring Decimal
- LeetCode:Fraction to Recurring Decimal
- Leetcode: Fraction to Recurring Decimal
- Leetcode: Fraction to Recurring Decimal
- [LeetCode] Fraction to Recurring Decimal
- [LeetCode]Fraction to Recurring Decimal
- leetcode:Fraction to Recurring Decimal
- [LeetCode]Fraction to Recurring Decimal
- Leetcode: Fraction to Recurring Decimal
- [leetcode]Fraction to Recurring Decimal
- LeetCode: Fraction to Recurring Decimal
- [LeetCode] Fraction to Recurring Decimal
- leetcode: Fraction to Recurring Decimal
- 马尔柯夫预测法
- BHO启动IE调试
- mybatis环境搭建
- LINUX下手动添加swap分区
- SAE笔记django 与 cron
- LeetCode Fraction to Recurring Decimal
- I2C打印
- iOS形成静态库方法
- mybatis使用示例
- StarUML使用
- 通过设置子窗体透明度,解决C# winform 子窗体设置背景图卡的问题
- libxml2对XML文件的
- confirm用法
- Initializing a Build Environment