给定正整数 k
,你需要找出可以被 k
整除的、仅包含数字 1
的最 小 正整数 n
的长度。
返回 n
的长度。如果不存在这样的 n
,就返回-1。
注意: n
可能不符合 64 位带符号整数。
示例 1:
输入:k = 1 输出:1 解释:最小的答案是 n = 1,其长度为 1。
示例 2:
输入:k = 2 输出:-1 解释:不存在可被 2 整除的正整数 n 。
示例 3:
输入:k = 3 输出:3 解释:最小的答案是 n = 111,其长度为 3。
思路:首先排除2和5的倍数,因为它们的倍数无法乘出个位数为1的结果,对于其他剩余的数字,在k轮内必有解。
对于剩余的有解的数,参照除法竖式,很容易就能求出。
int smallestRepunitDivByK(int k){
if(k%2==0 || k%5==0)
{
return -1;
}
int a=1%k,len=1;
while(a!=0)
{
a=(a*10+1)%k;
len++;
}
return len;
}