• 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;
        }
    };
    
  • 相关阅读:
    redis未授权访问简单总结
    CORS跨域资源共享漏洞初探
    Mysql UDF提权方法
    hacknos-player靶机渗透
    深入理解Java虚拟机-类加载连接和初始化解析
    Dnslog盲注
    让服务器使用密钥
    自动备份站点
    自动放行nginx后台访问ip
    mysql增备
  • 原文地址:https://www.cnblogs.com/xuyy-isee/p/10596554.html
Copyright © 2020-2023  润新知