你好呀,我是灰小猿,一个超会写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); } } }
输出样例: