【每日蓝桥】27、一五年省赛Java组真题“循环节长度”

你好呀,我是灰小猿,一个超会写bug的程序猿!

欢迎大家关注我的专栏“每日蓝桥”,该专栏的主要作用是和大家分享近几年蓝桥杯省赛及决赛等真题,解析其中存在的算法思想、数据结构等内容,帮助大家学习到更多的知识和技术!

标题:循环节长度

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

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来对余数进行存储,之后将余数与数组中存储的数据进行对比,判断数据是否重复,之后判断重复的数据长度即可。

答案源码:

import java.util.Vector;

public class Year2015_Bt4 {

	public static void main(String[] args) {
		System.out.println(f(11, 13));
	}
	
	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()-v.indexOf(n);
		
		}
		
	}

}

输出样例:

其中有不足或者改进的地方,还希望小伙伴留言提出,一起学习!

感兴趣的小伙伴可以关注专栏!

灰小猿陪你一起进步!

猜你喜欢

转载自blog.csdn.net/weixin_44985880/article/details/114538738