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 {
private:
int countDigit(int n, int digit)
{
long num = n;
int count = 0;
long curDigitPos = 1;
while (num/curDigitPos)
{
int currentDigit = (num%(curDigitPos*10))/curDigitPos;
int upperDigits = num/(curDigitPos*10);
if (currentDigit > digit)
{
count += (upperDigits+1) * curDigitPos;
}
else if (currentDigit < digit)
{
count += upperDigits * curDigitPos;
}
else
{
count += upperDigits * curDigitPos + num % curDigitPos + 1;
}
curDigitPos = curDigitPos * 10;
}
return count;
}
public:
int countDigitOne(int n) {
if (n <= 0)
return 0;
return countDigit(n, 1);
}
};