程序员面试题精选100题:求从1到n的正数中1出现的次数
// 程序员面试题精选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出现的次数相关推荐
- 程序员面试题精选100题
程序员面试题精选100题(01)-把二元查找树转变成排序的双向链表 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.要求不能创建任何新的结点,只调整指针的指向. 比如将二元查找树 ...
- 程序员面试题精选100题:41-50解题报告
程序员面试题精选100题(41)-把数组排成最小的数[算法] 题目:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个.例如输入数组{32, 321},则输出这两个能 ...
- 程序员面试题精选100题:11-40解题报告
程序员面试题精选100题(11)-求二元查找树的镜像[数据结构] 题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点.用递归和循环两种方法完成 ...
- [程序员面试题精选100题]13.第一个只出现一次的字符
[题目] 在一个字符串中找到第一个只出现一次的字符.如输入abaccdeff,则输出b. [分析] [代码] /********************************* * 日期:2013- ...
- 程序员面试题精选100题(51)-顺时针打印矩阵
// 程序员面试题精选100题(51)-顺时针打印矩阵.cpp : 定义控制台应用程序的入口点. //#include "stdafx.h" #include <iostre ...
- 程序员面试题精选100题(03)-子数组的最大和[算法]
题目:输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.要求时间复杂度为O(n). 例如输入的数组为1, -2, 3, ...
- [程序员面试题精选100题]19.反转链表
题目 输入一个链表的头结点,反转该链表,并返回反转后链表的头结点. 分析 假设经过若干操作,我们已经把结点 pre之前的指针调整完毕,这些结点的next指针都指向前面一个结点.现在我们遍历到结点cur ...
- python程序员面试题精选100题_在Python程序员面试中被问的最多的10道题
我们在为大家整Python程序员面试试题中,发现了一些被面试官问到的最多的一些问题,以下就是本篇内容: Python是个非常受欢迎的编程语言,随着近些年机器学习.云计算等技术的发展,Python的职位 ...
- 程序员面试题精选100题(16)-O(logn)求Fibonacci数列[算法]
题目:定义Fibonacci数列如下: / 0 n=0 f(n)= 1 n=1 \ f ...
最新文章
- 谭浩强c语言第六章兔子数列,谭浩强 C语言 第6章_循环.ppt
- phppage类封装分页功能_封装page分页类
- 基于OpenCV进行相机标定
- Redis常用命令之操作Set(集合)
- .Net Core中依赖注入服务使用总结
- MarkDown语法, 快捷键,Dos命令
- 二叉搜索树的删除操作可以交换吗_一文看懂数据结构中的树
- 金山云笔试题:AKM函数
- MVC +EF+linq 多表联查
- c++ 编译时函数匹配和运行时类型识别
- 密码协议(一)协议概述
- OSChina 周三乱弹 —— 九招助你工资秒长(干货哟)
- springboot整合mysql
- 工业企业外购材料进项税额的会计处理
- jenkins 插件_Jenkins通过Ruby插件赢得了新的皇冠
- OSChina 周二乱弹 ——人在职场飘,哪能不跳槽
- html dt和dd顺序,dl dt dd使用方法
- Git Bash 下进行快速复制粘贴
- php活体检测,人脸门禁系统中活体检测的必要性
- List多条件组合排序