思路:寻找循环节(由余数组成)
因为在一个循环节中,可能会有重复的数字,比如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);
}
}
}