zoukankan      html  css  js  c++  java
  • 166. Fraction to Recurring Decimal

        /*
         * 166. Fraction to Recurring Decimal
         * 12.10 by Mingyang
         * 我在这一题目里面犯的最大的错误就是不是用余数的重现来判断循环,而是用商的重复,这是不对的!
         * 另外没有很好地利用hashmap来存后面的第一次出现的index的值。
         * 所以这里的hashmap的值其实就是出现的长度
         * 不过学到如何把1转换成‘1’ char
         * String i = Integer.toString(se);
         * char a = i.charAt(0);
         */    
         public static String fractionToDecimal(int numerator, int denominator) {
                if (numerator == 0) return "0";
                if (denominator == 0) return "";       
                String ans = "";        
                //如果结果为负数
                if ((numerator < 0) ^ (denominator < 0)) {
                    ans += "-";
                }        
                //下面要把两个数都转为正数,为避免溢出,int转为long
                long num = numerator, den = denominator;
                num = Math.abs(num);
                den = Math.abs(den);            
                //结果的整数部分
                long res = num / den;
                ans += String.valueOf(res);        
                //如果能够整除,返回结果
                long rem = (num % den) * 10;
                if (rem == 0) return ans;        
                //结果的小数部分
                HashMap<Long, Integer> map = new HashMap<Long, Integer>();
                ans += ".";
                while (rem != 0) {
                    //如果前面已经出现过该余数,那么将会开始循环
                    if (map.containsKey(rem)) {
                        int beg = map.get(rem); //循环体开始的位置
                        String part1 = ans.substring(0, beg);
                        String part2 = ans.substring(beg, ans.length());
                        ans = part1 + "(" + part2 + ")";
                        return ans;
                    }            
                    //继续往下除
                    map.put(rem, ans.length());
                    res = rem / den;
                    ans += String.valueOf(res);
                    rem = (rem % den) * 10;
                }        
                return ans;
            } 
  • 相关阅读:
    linux C 代码查看推荐 anjuta
    Fixes error: "Couldnt load module pthres" and similar.
    mfloatabi=name
    ubuntu 阅读chm 文件
    android 文件系统挂报错 switch_root: bad init /sbin/init: No such file or directory
    writel __raw_writel mb()/rmb()/wmb()
    企业创新里的阴和阳
    关于verilog testbench
    Git使用初步
    Latchup初认识
  • 原文地址:https://www.cnblogs.com/zmyvszk/p/5560012.html
Copyright © 2011-2022 走看看