// 程序员面试题精选100题(25):求从1到n的正数中1出现的次数
// 如 f(253) = (2!=0) * 100 + 2 * f(99) + (5!=0) * 10 + 5 * f(9) + (3!=0) * 1 + 3 * 0;
// (2!=0)*100:100-199中百位出现的1的次数,2 * f(99):1-99,100-199中十位和个位出现的1的个数(1-199统计完)
// (5!=0)*10:210-219中十位出现的1的次数,5 * f(9):200-249中个位出现的1的个数(200-249统计完)
// (3!=0) * 1:251中个位出现1的次数,3 * 0:250-253中上一位出现1的个数(不存在),(250-253统计完)
// f(0) = 0,f(9) = (9!=0) * 1 + 3 * 0 = 1,f(99) = (9!=0) * 10 + 9 * f(9) + (9!=0) * 1 + 9 * 0 = 20
int NumberOfOneBetween1AndN(unsigned int n)
{// PowerBase10:表示10的幂数,依次为1,10,100...// f_PowerBase10Minus1:依次为f(0),f(9),f(99)...int PowerBase10 = 1, f_PowerBase10Minus1 = 0;int firstDigit;int NumberOfOne = 0;// 依次从低位到高位统计,如上例,依次累加250-253,200-249,1-199中1的个数while (n != 0){firstDigit = n % 10;n = n / 10;NumberOfOne += (firstDigit != 0) * PowerBase10 + firstDigit * f_PowerBase10Minus1;    // 将当前位对应的1的个数累加到NumberOfOnef_PowerBase10Minus1 = PowerBase10 + 10 * f_PowerBase10Minus1; //递推求出f_PowerBase10Minus1PowerBase10 *= 10;}return NumberOfOne;
}

欢迎转载,转载请注明出处 http://blog.csdn.net/hugang012070/article/details/8916203。

程序员面试题精选100题:求从1到n的正数中1出现的次数相关推荐

  1. 程序员面试题精选100题

    程序员面试题精选100题(01)-把二元查找树转变成排序的双向链表 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.要求不能创建任何新的结点,只调整指针的指向. 比如将二元查找树   ...

  2. 程序员面试题精选100题:41-50解题报告

    程序员面试题精选100题(41)-把数组排成最小的数[算法]   题目:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个.例如输入数组{32,  321},则输出这两个能 ...

  3. 程序员面试题精选100题:11-40解题报告

    程序员面试题精选100题(11)-求二元查找树的镜像[数据结构]   题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点.用递归和循环两种方法完成 ...

  4. [程序员面试题精选100题]13.第一个只出现一次的字符

    [题目] 在一个字符串中找到第一个只出现一次的字符.如输入abaccdeff,则输出b. [分析] [代码] /********************************* * 日期:2013- ...

  5. 程序员面试题精选100题(51)-顺时针打印矩阵

    // 程序员面试题精选100题(51)-顺时针打印矩阵.cpp : 定义控制台应用程序的入口点. //#include "stdafx.h" #include <iostre ...

  6. 程序员面试题精选100题(03)-子数组的最大和[算法]

    题目:输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.要求时间复杂度为O(n). 例如输入的数组为1, -2, 3, ...

  7. [程序员面试题精选100题]19.反转链表

    题目 输入一个链表的头结点,反转该链表,并返回反转后链表的头结点. 分析 假设经过若干操作,我们已经把结点 pre之前的指针调整完毕,这些结点的next指针都指向前面一个结点.现在我们遍历到结点cur ...

  8. python程序员面试题精选100题_在Python程序员面试中被问的最多的10道题

    我们在为大家整Python程序员面试试题中,发现了一些被面试官问到的最多的一些问题,以下就是本篇内容: Python是个非常受欢迎的编程语言,随着近些年机器学习.云计算等技术的发展,Python的职位 ...

  9. 程序员面试题精选100题(16)-O(logn)求Fibonacci数列[算法]

    题目:定义Fibonacci数列如下: /  0                      n=0 f(n)=      1                      n=1         \  f ...

最新文章

  1. 谭浩强c语言第六章兔子数列,谭浩强 C语言 第6章_循环.ppt
  2. phppage类封装分页功能_封装page分页类
  3. 基于OpenCV进行相机标定
  4. Redis常用命令之操作Set(集合)
  5. .Net Core中依赖注入服务使用总结
  6. MarkDown语法, 快捷键,Dos命令
  7. 二叉搜索树的删除操作可以交换吗_一文看懂数据结构中的树
  8. 金山云笔试题:AKM函数
  9. MVC +EF+linq 多表联查
  10. c++ 编译时函数匹配和运行时类型识别
  11. 密码协议(一)协议概述
  12. OSChina 周三乱弹 —— 九招助你工资秒长(干货哟)
  13. springboot整合mysql
  14. 工业企业外购材料进项税额的会计处理
  15. jenkins 插件_Jenkins通过Ruby插件赢得了新的皇冠
  16. OSChina 周二乱弹 ——人在职场飘,哪能不跳槽
  17. html dt和dd顺序,dl dt dd使用方法
  18. Git Bash 下进行快速复制粘贴
  19. php活体检测,人脸门禁系统中活体检测的必要性
  20. List多条件组合排序

热门文章

  1. 【MySQL基础】SQL语言的概述、组成及特点
  2. 数学建模日常心得笔记
  3. Java网络编程 - TCP通信
  4. c语言单招试题,高职单招数学模拟试题
  5. 如何设置ISIS中电源的值
  6. 在批处理中提升权限 (UAC开启状态下)
  7. IDEA database 数据库工具
  8. Silicon EFR32BG22 BG22(1) 片内OTA(双bank)
  9. PLC按条件查询MySQL/SQLServer/PostgreSQL数据库,将数据写入寄存器
  10. PROC REPORT基础