欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

取小数的循环体 博客分类: java算法 java算法字符串小数 

程序员文章站 2024-03-24 21:56:40
...

1/7 = 0.142857142... 是个无限循环小数。
任何有理数都可以表示为无限循环小数的形式。

本题目要求即是:给出一个数字的循环小数表示法。

例如:
输入:
1,5
则输出:
0.2

输入:
1,7
则输出:
0.[142857]

输入:
7,6
则输出:
1.1[6]

用户输入的格式是:
整数,整数

每个整数范围均为:1~1000

程序输出两个整数做除法产生的小数或无限循环小数(循环节用方括号括起)。



要求考生把所有类写在一个文件中。
调试好后,存入与考生文件夹下对应题号的“解答.txt”中即可。
相关的工程文件不要拷入。请不要使用package语句。

另外,源程序中只能出现JDK1.5中允许的语法或调用。不能使用1.6或更高版本。




package 循环小数;

public class Main {
	
	public static void main(String[] arg){
		double a =5;
		double b = 9;
		f(a, b);
	}
	
	//处理数据
	public static void f(double a ,double b){
		double c = a/b;
		
		String str = String.valueOf(c);
//		System.out.println(str);
		
		//取出整数和小数部分
		int index = str.indexOf(".");
		String integer = str.substring(0,index);
		String decimals = str.substring(index+1, str.length()-index+1);
//		System.out.println(decimals);
		
		// 对小数部分进行循环取循环体;
		String temp = "";
		String forTempString = "";
		for(int i=0;i<decimals.length()-1;i++){
			String ch = ""+decimals.charAt(i);
			if(!temp.contains(ch)){
				temp += ""+ch;
			}else{
				forTempString+=ch;
			}
			
		}
//		System.out.println(temp+"   "+forTempString);
		
		String  result =str; //记录最后结果
		for(int i=temp.length()-1;i>=0;i--){
			
			//从最后一位开始取 字符,然后在forTempString中取相同的字符进行比较,如果相同,则该基数为循环体;剩余temp中为取的部分为非循环体;
			String base = temp.substring(i, temp.length());
			int n = temp.length()-i;	//取字符的数量;
			if(forTempString.substring(0, n).equals(base)){
			
				//此时的base 就是循环体;
//				System.out.println(base);
				
				//当前的i的值能得出非循环体,组合得到最后结果
//				System.out.println(temp.subSequence(0, i));
				result = integer+"."+temp.substring(0, i)+"["+base+"]";
				break;
			}
		}
		System.out.println(result);
	}
	
}