题目
解题思路
长除法
代码
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();}
