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;
}
};
//此题看了别人做的,思考良久才懂,要想想看如何总结规律
原文:http://www.cnblogs.com/jason1990/p/4649386.html