1. 程式人生 > >Weekly Contest 129--1022. Smallest Integer Divisible by K--Medium

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

最大公約數 實現 HERE pub 公約數 == amp urn nat

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來存儲,還是超出範圍;
  • 之後參考了其他資料才知道可以用下面這樣類似於歐幾裏得算法來求解。

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;
    }
};

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