题目

类型:Math
难度:中等
image.png

解题思路

长除法
image.png

image.png

代码

  1. public String fractionToDecimal(int numerator, int denominator) {
  2. long numeratorLong = (long) numerator;
  3. long denominatorLong = (long) denominator;
  4. if (numeratorLong % denominatorLong == 0) {
  5. return String.valueOf(numeratorLong / denominatorLong);
  6. }
  7. StringBuffer sb = new StringBuffer();
  8. if (numeratorLong < 0 ^ denominatorLong < 0) {
  9. sb.append('-');
  10. }
  11. // 整数部分
  12. numeratorLong = Math.abs(numeratorLong);
  13. denominatorLong = Math.abs(denominatorLong);
  14. long integerPart = numeratorLong / denominatorLong;
  15. sb.append(integerPart);
  16. sb.append('.');
  17. // 小数部分
  18. StringBuffer fractionPart = new StringBuffer();
  19. Map<Long, Integer> remainderIndexMap = new HashMap<Long, Integer>();
  20. long remainder = numeratorLong % denominatorLong;
  21. int index = 0;
  22. while (remainder != 0 && !remainderIndexMap.containsKey(remainder)) {
  23. remainderIndexMap.put(remainder, index);
  24. remainder *= 10;
  25. fractionPart.append(remainder / denominatorLong);
  26. remainder %= denominatorLong;
  27. index++;
  28. }
  29. if (remainder != 0) { // 有循环节
  30. int insertIndex = remainderIndexMap.get(remainder);
  31. fractionPart.insert(insertIndex, '(');
  32. fractionPart.append(')');
  33. }
  34. sb.append(fractionPart.toString());
  35. return sb.toString();
  36. }