166 Fraction to Recurring Decimal 分数到小数

Posted lina2014

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了166 Fraction to Recurring Decimal 分数到小数相关的知识,希望对你有一定的参考价值。

给定两个整数,分别表示分数的分子和分母,返回字符串格式的小数。
如果小数部分为循环小数,则将重复部分括在括号内。
例如,
    给出 分子 = 1, 分母 = 2,返回 "0.5".
    给出 分子 = 2, 分母 = 1,返回 "2".
    给出 分子 = 2, 分母 = 3,返回 "0.(6)".

详见:https://leetcode.com/problems/fraction-to-recurring-decimal/description/

Java实现:

class Solution {
    public String fractionToDecimal(int numerator, int denominator) { 
        if(numerator == 0){
             return "0";
        }
        if(denominator == 0){
            return "";
        } 
        
        String res = "";
        
        //判断结果是否为负数,加负号
        if((numerator<0) ^ (denominator<0)){
            res += "-";
        }
        
        //保证分子分母都为正数,防止取绝对值溢出,先将int转换为long,再取绝对值
        long num = numerator;
        long den = denominator;
        num = Math.abs(num);
        den = Math.abs(den);
        
        //得到结果的整数部分
        long numInt = num/den;
        res += String.valueOf(numInt);
        
        //判断是否能整除,如果能,则直接返回结果
        long number = (num%den)*10;
        if(number==0){
            return res;
        }
        
        //结果的小数部分:使用map记录每次操作之后的余数和对应的下标,HashMap的<key, value>分别对应<当前余数, 对应结果的下标>,当出现重复值的时候,可以通过对应下标寻找到重复部分。
        HashMap<Long, Integer> map = new HashMap<Long, Integer>();
        res += ".";
        while(number!=0){
            //判断map中是否出现过该余数,如果出现过则开始循环
            if(map.containsKey(number)){
                int beg = map.get(number); //循环体开始的位置
                String part1 = res.substring(0, beg);
                String part2 = res.substring(beg, res.length());
                res = part1 + "(" + part2 + ")";
                return res;
            }
            
            //继续下除
            map.put(number, res.length());
            numInt = number / den;
            res += String.valueOf(numInt);
            number = (number%den) * 10;
        }
        
        return res;
    }
}

详见:https://www.cnblogs.com/grandyang/p/4238577.html

以上是关于166 Fraction to Recurring Decimal 分数到小数的主要内容,如果未能解决你的问题,请参考以下文章

166. Fraction to Recurring Decimal

166. Fraction to Recurring Decimal

166. Fraction to Recurring Decimal

166. Fraction to Recurring Decimal

166. Fraction to Recurring Decimal

Leetcode 166 Fraction to Recurring Decimal