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

题目:
输入一个整数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;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容