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

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

作者: qmss | 来源:发表于2016-06-28 21:55 被阅读0次

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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/ucwtjttx.html