题目:输入一个整数n,求1-n这n个整数的十进制表示中1出现的次数。例如,输入12,1-12这些整数中包含1的数字有1、10、11、12,1一共出现了5次。

采用递归的思路

int NumberOf1(const char* strN);
int PowerBase10(unsigned int n);
int NumberOf1Between1AndN_Solution2(int n)
{
    if(n <= 0)
        return 0;
    char strN[50];
    sprintf(strN, "%d", n);
    return NumberOf1(strN);
}
int NumberOf1(const char* strN)
{
    if(!strN || *strN < '0' || *strN > '9' || *strN == '\0')
        return 0;
    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;
    // 假设strN是"21345"
    // numFirstDigit是数字10000-19999的第一个位中1的数目
    int numFirstDigit = 0;
    if(first > 1)
        numFirstDigit = PowerBase10(length - 1);
    else if(first == 1)
        numFirstDigit = atoi(strN + 1) + 1;
    // numOtherDigits是01346-21345除了第一位之外的数位中1的数目
    int numOtherDigits = first * (length - 1) * PowerBase10(length - 2);
    // numRecursive是1-1345中1的数目
    int numRecursive = NumberOf1(strN + 1);
    return numFirstDigit + numOtherDigits + numRecursive;
}
int PowerBase10(unsigned int n)
{
    int result = 1;
    for(unsigned int i = 0; i < n; ++ i)
        result *= 10;
    return result;
}
int main()
{
char s[] = "21345";
int result = NumberOf1(s);
cout << result;
system("pause");
return 0;
}

1-n整数中1出现的次数相关推荐

  1. shell最大出现和连续出现次数_从 1 到 n 整数中 1 出现的次数

    题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了. ...

  2. 剑指offer:整数中1出现的次数(从1到n整数中1出现的次数)

    题目描述 求出1-13的整数中1出现的次数,并算出100-1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了. ...

  3. 【刷算法】整数中1出现的次数(从1到n整数中1出现的次数)

    题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了. ...

  4. 从1到n整数中1出现的次数

    从1到n整数中1出现的次数 题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次, ...

  5. 整数中1出现的次数(从1到n整数中1出现的次数)

    题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了. ...

  6. 30 整数中1出现的次数(从1到n整数中1出现的次数)这题很难要多看*

    题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了. ...

  7. 《剑指offer》-- 数组中的逆序对、最小的K个数、从1到n整数中1出现的次数、正则表达式匹配、数值的整数次方

    一.数组中的逆序对: 1.题目: 数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出 ...

  8. 《剑指offer》整数中1出现的次数(从1到n整数中1出现的次数)

    题目:求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了.AC ...

  9. 《剑指offer》第四十三题(从1到n整数中1出现的次数)

    // 面试题43:从1到n整数中1出现的次数 // 题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例如 // 输入12,从1到12这些整数中包含1 的数字有1,10,11和12 ...

  10. 《剑指offer》-整数中1出现的次数

    题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了. ...

最新文章

  1. Hadoop Backup Node
  2. Swift函数_默认参数
  3. 第73课 丑数 函数的应用
  4. prompt 你到底行不行?
  5. python office转pdf_python 如何将office文件转换为PDF
  6. String的replaceAll()用法详解
  7. Java反射----理解反射的源头Class类
  8. Indy TCP/IP 组件里的几个常用方法
  9. python写一个数字字典生成器
  10. 网安、ctf常用网址
  11. (Math)矩阵求导
  12. 09-slash_backslash
  13. Python Flask Web教程006:Flask HTTP方法
  14. android 群组消息,极光IM- 群组管理 - 极光文档
  15. Hadoop Mapreduce组建 核心环形缓冲区 RingBuff 原理及Go实现
  16. 图片/文字间隙去除方法(html)
  17. java+sql+物流快递管理系统
  18. SwiftyJSON库的使用和思考
  19. 搭搭云 新世代超级应用平台 JNPF快速开发平台框架 3.4.7最新版本上线
  20. python海龟画图模块制作的拦球小游戏,谁说小海龟只会画图

热门文章

  1. 计算机基础与linux文件系统
  2. synchornized实现原理
  3. topcoder srm 704 div1
  4. 开发者的实用 Vim 插件(二)
  5. 持续集成并不能消除 Bug,而是让它们非常容易发现和改正(转)
  6. Cocos2d-x3.2 持续动作
  7. 笨办法学R编程(5)
  8. python在同一行输入n个数转义符_python:转义符\
  9. 手动抛出异常_超实用:关于Java异常设计和处理
  10. ThinkPHP自定义404页面