标题:循环节长度
两个整数做除法,有时会产生循环小数,其循环部分称为:循环节。
比如,11/13=6=>0.846153846153..... 其循环节为[846153] 共有6位。
下面的方法,可以求出循环节的长度。
请仔细阅读代码,并填写划线部分缺少的代码。
public static int f(int n, int m)
{
n = n % m;
Vector v = new Vector();
for(;;)
{
v.add(n);
n *= 10;
n = n % m;
if(n==0) return 0;
if(v.indexOf(n)>=0) _________________________________ ; //填空
}
}
注意,只能填写缺少的部分,不要重复抄写已有代码。不要填写任何多余的文字。
解析:
将题目代码做修改如下,观察Vector列表中的数据:
public static void f(int n, int m)
{
n = n % m;
Vector v = new Vector();
for(int i=1;i<=20;i++)
{
v.add(n);
n *= 10;
n = n % m;
//if(n==0) return 0;
//if(v.indexOf(n)>=0) _________________________________ ; //填空
}
System.out.println(v);
}
public static void main(String[] args)
{
System.out.println(11.0/13);
f(11,13);
System.out.println(7.0/18);
f(7,18);
}
程序运行结果为:
0.8461538461538461
[11, 6, 8, 2, 7, 5, 11, 6, 8, 2, 7, 5, 11, 6, 8, 2, 7, 5, 11, 6]
0.3888888888888889
[7, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16]
由上述结果我们可以看出除法结果的循环节长度和乘10求余数结果的循环节长度是相同的,即:
846153长度为6,[11, 6, 8, 2, 7, 5]长度为6
8的长度为1,[16]长度为1
题目中 if(n==0) 代表可以除尽,返回0,那么下面的if则需要返回题目要求的循环节长度,答案为:
return v.size() - v.indexOf(n);
网友评论