循环节长度 两个整数做除法,有时会产生循环小数,其循环部分称为:循环节。 比如,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) _________________________________ ; //填空 } } 注意,只能填写缺少的部分,不要重复抄写已有代码。不要填写任何多余的文字。
观察下行代码可以察觉这个for循环应该是将n%m的结果放入容器里面,是否当出现某个循环时就是答案,模拟一下就知道了。
v.add(n);
模拟18÷7=2.5714285714285714285714285714286......循环节是6
add.indexOf | 余数 |
0 | 4 |
1 | 5 |
2 | 1 |
3 | 3 |
4 | 2 |
5 | 6 |
6 | 4 |
7 | 5 |
8 | 1 |
9 | 3 |
上面表格是按照循环过程n=n%m,vector.add(n),n*=10,n=n%m......不断迭代得出来的余数,发现会出现循环体,出现循环的时候会出现重复的元素,所以每次判断当前余数是否出现过,即通过indexOf这个方法测定,当返回值为-1时说明这个余数没有出现过,否则返回其在容器里面的索引值;所以,当indexOf>=0时,输出容器大小即可。
一组测试数据:23÷17=1.3529411764705882352941176470588......,循环节是16
答案:return v.size()