Weekly Contest 129--1022. Smallest Integer Divisible by K--Medium

Given a positive integer K, you need find the smallest positive integer N such that N is divisible by K, and N only contains the digit 1.

Return the length of N. If there is no such N, return -1.

Example 1:

Input: 1
Output: 1
Explanation: The smallest answer is N = 1, which has length 1.
Example 2:

Input: 2
Output: -1
Explanation: There is no such positive integer N divisible by 2.
Example 3:

Input: 3
Output: 3
Explanation: The smallest answer is N = 111, which has length 3.

Note:

1 <= K <= 10^5

1.思考

  • 刚开始想到的是直接用int来存储N,但是发现超出了范围;
  • 后来改成long long来存储,还是超出范围;
  • 之后参考了其他资料才知道可以用下面这样类似于计算最大公约数的欧几里得算法来求解,如下:
    eg. K = 3
    11%3 = (9+2)%3 = 2%3
    (1110+1)%3 = ((9+2)10+1)%3 = (910+210+1)%3 = (2*10+1)%3

2.实现

class Solution {
public:
    int smallestRepunitDivByK(int K) {
        int n = 0;
        for(int i=1; i<=K; i++){            
            n = (n*10+1) % K;
            if(n==0)
                return i;
        }
        
        return -1;
    }
};
原文地址:https://www.cnblogs.com/xuyy-isee/p/10596554.html