题目描述:

主要思路:
寻找1的个数主要分为两个部分:完整的1和取余的1。
 完整的1:从个位一直到最高位,例如十位上的1可以出现10次,10-19,然后看他的高位,看看可以出现几轮循环。
 取余的1:当前位小于2,就要取低位的个数,如15,十位只能取6次1。
class Solution {
public:
    int countDigitOne(int n) {
        long long mulk = 1;
        int ans=0;
        for(int k=0;n>=mulk;++k)
        {
            ans+=(n/(mulk*10))*mulk+min(max(n%(mulk*10)-mulk+1,0ll),mulk);
            mulk*=10;
        }
        return ans;
    }
};


















