题目

代码分析

需要注意的就是特殊情况的判断以及循环小数的处理问题,这里我们通过map,不断的记录每一次运算的余数,如果有余数是相同的话,这样的话,就会产生循环小数

代码实现

public static String fractionToDecimal(int numerator, int denominator){
        if(numerator==0) return "0";
        StringBuilder sb=new StringBuilder();
        if(numerator<0^denominator<0)
        {
            sb.append("-");
        }
        Long n=Math.abs(Long.valueOf(numerator));
        Long d=Math.abs(Long.valueOf(denominator));
        long first=n/d;
        sb.append(first);
        n=n%d;
        if(n==0)
        {
            return sb.toString();
        }
        sb.append(".");
        HashMap<Long,Integer> map=new HashMap<>();
        while(n!=0)
        {
            if(map.containsKey(n))
            {
                sb.insert(map.get(n),"(");
                sb.append(")");
                break;
            }
            map.put(n,sb.length());
            n*=10;
            sb.append(n/d);
            n=n%d;
        }
        return sb.toString();
    }

学习情况

1次