zoukankan      html  css  js  c++  java
  • 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;
        }
    };
    
  • 相关阅读:
    Linux下增加User及添加sudo权限
    windows下的asp.net core开发及docker下的发布
    Linux下建立虚拟内存
    Github访问慢解决办法
    Uva 10061
    SYOJ 1001. Alphacode
    SRM144DIV1 Lottery
    SRM609 DIV2 950
    mysql 半同步
    mysql root用户不知到密码的情况下修改密码
  • 原文地址:https://www.cnblogs.com/xuyy-isee/p/10596554.html
Copyright © 2011-2022 走看看