栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

166. 分数到小数

Java 更新时间:发布时间: 百科书网 趣学号
题目


#代码

class Solution {
    public String fractionToDecimal(int numerator, int denominator) {
        long numeratorLong = (long) numerator;
        long denominatorLong = (long) denominator;
        if (numeratorLong % denominatorLong == 0) {
            return String.valueOf(numeratorLong/denominatorLong);//用于将数值转化为String类型
        }

        StringBuffer sb = new StringBuffer();
        if (numeratorLong < 0 ^ denominatorLong < 0) {//判断小数是否为负数
            sb.append('-');
        }

        // 整数部分
        numeratorLong = Math.abs(numeratorLong);
        denominatorLong = Math.abs(denominatorLong);
        long integerPart = numeratorLong / denominatorLong;
        sb.append(integerPart);
        sb.append('.');

        // 小数部分
        StringBuffer fractionPart = new StringBuffer();
        Map remainderIndexMap = new HashMap();//通过Map来储存余数,若余数出现过,则为循环小数
        long remainder = numeratorLong % denominatorLong;
        int index = 0;
        while (remainder != 0 && !remainderIndexMap.containsKey(remainder)) {//当余数为零或者余数重复跳出循环
            remainderIndexMap.put(remainder, index);
            remainder *= 10;
            fractionPart.append(remainder / denominatorLong);
            remainder %= denominatorLong;
            index++;
        }
        if (remainder != 0) { // 有循环节
            int insertIndex = remainderIndexMap.get(remainder);//获取第一次余数出现的下标
            fractionPart.insert(insertIndex, '(');
            fractionPart.append(')');
        }
        sb.append(fractionPart.toString());

        return sb.toString();
    }
}


方法
  • 长除法
  • 计算长除法时,首先计算结果的整数部分,将以下部分依次拼接到结果中:
  • 如果结果是负数则将负号拼接到结果中,如果结果是正数则跳过这一步。
  • 将整数部分拼接到结果中;
  • 将小数点拼接到结果中。
  • 计算小数部分时,每次将余数乘以 1010,然后计算小数的下一位数字,并得到新的余数。重复上述操作直到余数变成 00 或者找到循环节。
  • 如果余数变成 00,则结果是有限小数,将小数部分拼接到结果中。
  • 如果找到循环节,则找到循环节的开始位置和结束位置并加上括号,然后将小数部分拼接到结果中。
转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/293152.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号