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(); }}