分子为1的分数称为单分数。分母是2到10的单分数用十进制表示如下:
1/2 = 0.5 1/3 = 0.(3) 1/4 = 0.25 1/5 = 0.2 1/6 = 0.1(6) 1/7 = 0.(142857) 1/8 = 0.125 1/9 = 0.(1) 1/10 = 0.1
其中0.1(6) 表示 0.166666...,因此它又一个长度为1的循环圈。可以看出1/7拥有一个6位的循环圈。
找出小于1000的数字d,1/d 的十进制表示含有最长的循环圈。
基础知识:
如果一个数的质因子全是2和5的话,这个数的倒数是不会无限循环的
如2,4,5,8,10
而一个数把质因子中的2和5除去后,得到一个数,我们称之为“基数”吧
这个数和它的基数的倒数循环的长度是相同的
比如说3和6的倒数的循环长度都是1
而怎么计算一个数的循环长度呢
只需要知道它能被多少长度的9整除就行了
3能被9整除,所以它的循环长度是1
7能被999999整除,商正好是循环体142857,所以它的循环长度是6
先求一个数的基数,如果是它本身,则计算它的循环长度
如果不是它自身,那它的循环长度等于基数的循环长度
public class Test {
/**
* 求基数
*/
public static int getBaseNum(int n) {
while (n % 2 == 0) {
n /= 2;
}
while (n % 5 == 0) {
n /= 5;
}
return n;
}
public static void main(String[] args) {
int baseN;
int temp = 9;
int len = 1;
int max = 0;
int maxNum = 1;
for (int i = 2; i < 1000; i++) {
baseN = getBaseNum(i);
while (temp < baseN) {
temp = temp * 10 + 9;
len++;
}
while (temp % baseN != 0) {
temp = temp % baseN * 10 + 9;
len++;
if (len > max) {
max = len;
maxNum = i;
}
if (temp % baseN == 0)
break;
}
temp = 9;
len = 1;
}
System.out.println(maxNum);
}
}
解决方案来自于: http://blog.sina.com.cn/s/blog_9f26be1d01012nyv.html