题目:
输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。
解法:
int numberOf1Between1AndN(int n) {
if (n <= 0) return 0;
char strN[50];
sprintf(strN, "%d", n);
return numberOf1(strN);
}
int numberOf1(const char* strN) {
int first = *strN - '0';
unsigned int length = static_cast<unsigned int>(strlen(strN));
if (length == 1 && first == 0) return 0;
if (length == 1 && first > 0) return 1;
int numFirstDight = 0;
if (first > 1)
numFirstDigit = PowerBase10(length - 1);
else if (first == 1) {
numFirstDigit = atoi(strN+1) + 1;
}
int numOtherDigits = first * powerBase10(length-2);
int numRecursive = numberOf1(strN + 1);
return numFirstDigit + numOtherDigits + numRecursive;
}