(*)剑指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;
}

推荐阅读更多精彩内容

  • 1.把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不...
    曲终人散Li阅读 2,931评论 0 19
  • 1.字符串的排列 1.1.题目 题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串a...
    chappie2017阅读 405评论 0 3
  • 整数中1出现的次数(从1到n整数中1出现的次数) 题目描述 求出113的整数中1出现的次数,并算出1001300的...
    echoVic阅读 513评论 0 1
  • 最近在准备一些暑期实习的笔试和面试,在牛客网上面做了一些题,现在整理出来供大家参考,希望和大家共同学习!题目不难,...
    Torang阅读 2,164评论 3 11
  • 因为2016年过的太差,所以好希望2017年快点来到。总觉得新年新气象,一切都会不一样。霉运也会被驱散,好运会随着...
    李思量阅读 119评论 1 1
  • 前两天在微博里看到关于毕业季的话题,不由自主的点了进去,看到第二页留言时,眼睛涩涩的。今天早上起床,我对室友说:...
    疯子嘟阅读 94评论 0 0
  • 故乡灰黄色的土地 因承载过我的奔跑和身影 没有清冷与萧瑟 只有亲切和温情 高高矗立的大杨树 因遮挡过我头顶的烈日和...
    北疆牧者阅读 594评论 0 6
  • 今年中考前,布置好一切与考试相关的事宜,祝孩子们考试期间吃好喝好睡好后,便匆匆离开了教室,因为不太喜欢离别的伤感与...
    老草阅读 419评论 24 13