当前位置: 首页 > 图灵资讯 > 技术篇> #yyds干货盘点# LeetCode程序员面试金典:分数到小数

#yyds干货盘点# LeetCode程序员面试金典:分数到小数

来源:图灵教育
时间:2023-05-23 09:24:39

1.简述:

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

若小数部分为循环小数,则将循环部分包括在括号中。

如果有多个答案,只需返回 任意一个 。

对于所有给定的输入,确保 答案字符串的长度小于 104 。

示例 1:

输入:numerator = 1, denominator = 2

输出:“0.5”

示例 2:

输入:numerator = 2, denominator = 1

输出:"2"

示例 3:

输入:numerator = 4, denominator = 333

输出:"0.(012)"

2.实现代码:

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);        }        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<Long, Integer> remainderIndexMap = new HashMap<Long, Integer>();        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();    }}