Given an integer n, count the total number of digit 1 appearing in all non-negative integers less than or equal to n.
Example:
Input: 13 Output: 6 Explanation: Digit 1 occurred in the following numbers: 1, 10, 11, 12, 13.
class Solution {
public:
/*int countDigitOne(int n) {
if(n<=0) return 0;
int sum = 0;
for(int i=1; i<=n; i++)
sum += NumOne(i);
return sum;
}
int NumOne(int n)
{
int sum = 0;
while(n)
{
if(n%10==1)
sum++;
n/=10;
}
return sum;
}*/
int countDigitOne(int n) {
if(n<=0 ) return 0;
string str = to_string(n);
int first = str[0] - '0';
int length = str.length();
if(length==1&&first>0)
return 1;
int NumFirstDigit = 0;
if(first>1)
{
NumFirstDigit = PowerBase10(length-1);
}else if(first=1)
{
string tmp = str.substr(1);
NumFirstDigit = atoi(tmp.c_str()) + 1;
}
int NumOtherDigit = first*(length-1)*PowerBase10(length-2);
string tmp = str.substr(1);
int NumRecursiveDigit = countDigitOne(atoi(tmp.c_str()));
return NumFirstDigit + NumOtherDigit + NumRecursiveDigit;
}
int PowerBase10(unsigned int n)
{
int result = 1;
for(int i=0; i<n; i++)
result *= 10;
return result;
}
};