这一题,首先如果直接去算的话,很容易就超出int或者long的表示范围了。那么要利用%的性质,(num * 10 + 1) % a = 10 * (num % a) + 1 % a。除了a为1的情况,都是10 * (num % a) + 1。然后计算的时候,先去掉是2和5的倍数的情况。也可以直接做,如果余数出现过,就不用继续了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
int
findMinAllOne( int
a) {
if
(a % 2 == 0 || a % 5 == 0) return
-1;
if
(a == 1) return
1;
int
num = 1;
int
ans = 1;
while
( true ) {
if
(num % a == 0) {
return
ans;
} else
{
num %= a;
num = num * 10 + 1;
ans++;
}
}
} |