蓝桥杯小数循环节长度 - 模拟除法运算 Java

思路:寻找循环节(由余数组成)
因为在一个循环节中,可能会有重复的数字,比如3/17,所以不能根据小数点后的数字来分析。本题是通过看每次计算的余数是否与之前相等,来判断循环节长度的。因为余数一旦相等,乘以十后除以除数也必然相等。

import java.util.Vector;
import java.util.Scanner;
class Main {
	public static void main(String[] args) {//一定要是publIC!!!!!
		Scanner cin = new Scanner(System.in);
		int n = cin.nextInt();
		int m = cin.nextInt();
		System.out.println(solve(n, m));
	}
	 static int solve(int n, int m) {
		 n = n % m;	
   Vector<Integer> v = new Vector<Integer>();
   for(;;) {
	   v.add(n);
	   n *= 10;
	   n = n % m;
	  if(n == 0)
		  return 0;//m是不变的
	  else if(v.indexOf(n) >= 0)//用余数做判断标准,万无一失(因为余数 * 10 再除m得到的结果一定和上一次是一样的)。要注意循环节可能不是从0开始的所以要用size - indexOf
		  return v.size() - v.indexOf(n);
		}
	}
}

发布了246 篇原创文章 · 获赞 8 · 访问量 5596

猜你喜欢

转载自blog.csdn.net/weixin_43960370/article/details/104084392