166. 分数到小数

分数到小数

给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数。

如果小数部分为循环小数,则将循环的部分括在括号内。

示例 1:

输入: numerator = 1, denominator = 2
输出: "0.5"

思路+代码+注释:

public String fractionToDecimal(int numerator, int denominator) {
            /*
            思路:首先求两个数的商、余数,如果余数为0,直接返回商即可。如果余数不为0,那么使用余数*10/被除数,得到一位小数位的数字,
            新余数=余数*10%被除数,使用一个List记录所有小数位的数字,如果余数为0那么结果就出来了退出循环,拼接小数数字,如果余数不为0,
            那么继续计算,使用一个hashMap记录每个余数以及出现的位置,当hashMap中某个余数存在时,说明出现了循环,在该余数第一出现的位置前
            加{在集合的最后加}退出循环
             */
            if (denominator==0)
            {
                return "";
            }
            HashMap<Long,Integer> map=new HashMap<>();
            boolean flag=false;
            if ((numerator>0 && denominator<0) || (numerator<0 && denominator>0))
            {
                flag=true;
            }
            long numOne=Math.abs((long)numerator);
            long numTwo=Math.abs((long)denominator);
            long shang=numOne/numTwo;
            long yu=numOne%numTwo;
            StringBuilder res=new StringBuilder();
            if (flag)
            {
                res.append("-"+shang);
            }else {
                res.append(shang);
            }
            if (yu==0)
            {
                return res.toString();
            }
            res.append(".");
            List<String> xiaoShu=new ArrayList<>();
            int pos=0;
            while (yu!=0)
            {
                if (map.containsKey(yu))
                {
                    int leftIndex=map.get(yu);
                    xiaoShu.add(leftIndex,"(");
                    xiaoShu.add(")");
                    break;
                }else {
                    shang=yu*10/numTwo;
                    map.put(yu,pos);
                    xiaoShu.add(shang+"");
                    yu=yu*10%numTwo;
                    pos++;
                }
            }
        for (int i = 0; i < xiaoShu.size(); i++) {
            res.append(xiaoShu.get(i));
        }
        return res.toString();
    }

猜你喜欢

转载自blog.csdn.net/qq_36059306/article/details/88191216