目录
1 问题描述
1/7 = 0.142857142... 是个无限循环小数。
任何有理数都可以表示为无限循环小数的形式。
本题目要求即是:给出一个数字的循环小数表示法。
例如:
输入:
1,5
则输出:
0.2
输入:
1,7
则输出:
0.[142857]
输入:
7,6
则输出:
1.1[6]
用户输入的格式是:
整数,整数
每个整数范围均为:1~1000
程序输出两个整数做除法产生的小数或无限循环小数(循环节用方括号括起)。
2 解决方案
1 import java.math.BigDecimal; 2 import java.util.ArrayList; 3 import java.util.Scanner; 4 5 public class Main { 6 7 public static void main(String[] args) { 8 Scanner in = new Scanner(System.in); 9 String s = in.next(); 10 String[] arrayS = s.split(","); 11 BigDecimal a = new BigDecimal(arrayS[0]); 12 BigDecimal b = new BigDecimal(arrayS[1]); 13 a = a.divide(b, 200, BigDecimal.ROUND_UP ); 14 String temp = "" + a; 15 String t = "" + Double.valueOf(arrayS[0]) / Double.valueOf(arrayS[1]); 16 if(t.length() < 18) { 17 System.out.println(t); 18 return; 19 } 20 String temp1 = temp.substring(2); 21 ArrayList<Character> list = new ArrayList<Character>(); 22 for(int i = 0;i < temp1.length();i++) { 23 if(!list.contains(temp1.charAt(i))) 24 list.add(temp1.charAt(i)); 25 else { 26 int start = list.indexOf(temp1.charAt(i)); 27 int k = i, j = start; 28 for(;j < list.size() && k < 198;j++,k++) { 29 if(list.get(j) != temp1.charAt(k)) 30 break; 31 } 32 if(j == list.size()) { 33 if((j - start == 1 && temp1.charAt(i) == '0')) { 34 list.add(temp1.charAt(i)); 35 continue; 36 } 37 System.out.print(temp.substring(0, 2)); 38 for(int p = 0;p < list.size();p++) { 39 if(p == start) 40 System.out.print("["); 41 System.out.print(list.get(p)); 42 } 43 System.out.print("]"); 44 return; 45 } else 46 list.add(temp1.charAt(i)); 47 } 48 } 49 } 50 }
运行结果:
5,888
0.005[630]
2,19
0.[105263157894736842]