(*)剑指offer 面试题32:从1到n整数中1出现的次数

2016-06-28  本文已影响0人  qmss

题目:
输入一个整数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;
}
上一篇下一篇

猜你喜欢

热点阅读