取小数的循环体

[size=small][color=olive][b]
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或更高版本。[/b][/color][/size]


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);
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值