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.
class Solution {
public:
int countDigitOne(int n) {
if(n < 1) return 0;
long long base = 1;
long long cnt = 0;
while(n >= base){
int r = n / (base * 10);
int c = n % (base * 10) / base;
if(c == 0){
cnt += r * base;
} else if(c == 1){
cnt += r * base + n % (base * 10) % base + 1;
} else if(c > 1){
cnt += (r + 1) * base;
}
base *= 10;
}
return cnt;
}
};