Number of Digit One

Given an integer n, count the total number of digit 1 appearing in all non-negative integers less than or equal to n.

For example:
Given n = 13,
Return 6, because digit 1 occurred in the following numbers: 1, 10, 11, 12, 13.

Hint:

1.Beware of overflow

 

C++:

class Solution {
public:
    int countDigitOne(int n) {
        
        if(n<=0) return 0; //防止负数
        
        int res=0;
        for(long m=1;m<=n;m*=10)
        {
            long a=n/m,b=n%m;
            res+=(a+8)/10*m+(a%10==1)*(b+1);
        }
        return res;
    }
};

//此题看了别人做的,思考良久才懂,要想想看如何总结规律

原文地址:https://www.cnblogs.com/jason1990/p/4649386.html