分数到小数
给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数。
如果小数部分为循环小数,则将循环的部分括在括号内。
示例 1:
输入: numerator = 1, denominator = 2
输出: "0.5"
示例 2:
输入: numerator = 2, denominator = 1
输出: "2"
示例 3:
输入: numerator = 2, denominator = 3
输出: "0.(6)"
1 import java.util.ArrayList; 2 import java.util.HashMap; 3 import java.util.List; 4 5 public class Solution { 6 public static String fractionToDecimal(int numerator, int denominator) { 7 HashMap<Long,Integer> maps = new HashMap<>();//store divid number 8 List<Long> number = new ArrayList<>(); 9 int index = 0; int beginIndex = -1; 10 StringBuilder builder = new StringBuilder(); 11 if(denominator==0) return ""; 12 long num = numerator; 13 long denum = denominator; 14 if((num<0 && denum>0) || (num>0 && denum<0)) 15 builder.append('-'); 16 num = Math.abs(num); 17 denum = Math.abs(denum); 18 long val = num/denum; 19 builder.append(String.valueOf(val)); 20 num = (num%denum)*10; 21 while(num!=0){ 22 if(maps.containsKey(num)){//开始重复 23 beginIndex = maps.get(num); 24 break; 25 }else{ 26 maps.put(num, index++); 27 val = num/denum; 28 num = (num%denum)*10; 29 number.add(val); 30 } 31 } 32 for(int i = 0;i<index;i++){ 33 if(i==0) 34 builder.append('.'); 35 if(i==beginIndex){ 36 builder.append('('); 37 } 38 builder.append(number.get(i)); 39 } 40 if(beginIndex!=-1) 41 builder.append(')'); 42 return builder.toString(); 43 } 44 }