循环节长度(蓝桥杯)

两个整数做除法,有时会产生循环小数,其循环部分称为:循环节。
比如,11/13=6=>0.846153846153.....  其循环节为[846153] 共有6位。
下面的方法,可以求出循环节的长度。

请仔细阅读代码,并填写划线部分缺少的代码。    答案:v.size(()

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)
			{
				return _____________;//填空
			}
			
		}
	}

解析:v.indexOf(n):查找n第一次再v中出现的位置,即索引,没有找到返回-1

           (1):n=11、v.add(11)、n=110、n=6、v.indexOf=-1,v中一共有1个数据。

           (2):v.add(6)、n=60、n=8、v.indexOf=-1,v中一共有2个数据。

           (3):v.add(8)、n=80、n=2、v.indexOf=-1,v中一共有3个数据。

           (4):v.add(2)、n=20、n=7、v.indexOf=-1,v中一共有4个数据。

           (5):v.add(7)、n=70、n=5、v.indexOf=-1,v中一共有5个数据。

           (4):v.add(5)、n=50、n=11、v.indexOf=0,v中一共有6个数据。

代码如下:

import java.util.Scanner;
import java.util.Vector;

public class 循环节长度
{
	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)
			{
				return v.size();//填空
			}
			
		}
	}
	
	public static void main(String[] args)
	{
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		int m = in.nextInt();
		System.out.println(f(n,m));
	}
}

运行结果:

20 11
2
11 13
6

 

你可能感兴趣的:(蓝桥杯)