循环节长度 蓝桥杯

循环节长度

两个整数做除法,有时会产生循环小数,其循环部分称为:循环节。
比如,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()

 

posted @ 2019-03-22 15:56  一转身已万水千山  阅读(372)  评论(0编辑  收藏  举报