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:
Beware of overflow.
Solution
public class Solution {
public int countDigitOne(int n) {
int ans = 0;
for(long m=1; m<=n; m*=10){
int a = (int)(n / m);
int b = (int)(n % m);
if(a%10==0) ans += a/10*m;
else if(a%10==1) ans += a/10*m + (b+1);
else ans += (a/10+1)*m;
}
return ans;
}
}