2015年Java方向C组第四题

2021-02-11  本文已影响0人  D丝学编程

标题:循环节长度

两个整数做除法,有时会产生循环小数,其循环部分称为:循环节。

比如,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);
上一篇 下一篇

猜你喜欢

热点阅读