在从1到n的正数中1出现的次数
题目:输入一个整数 n ,求从 1 到 n 这 n 个整数的十进制表示中 1 出现的次数。例如输入 12 ,从 1 到 12 这些整数中包含 1 的数字有 1 , 10 , 11 和 12 ,1 一共出现了5 次。
分析:
我们曾遇到过求给定数num的二进制表示中1出现的次数,但此题是求十进制数中1出现的次数。简单的来想,可以用除法、取余来求的一个数中1的个数,然后再从1到n循环即可解决。但当n比较大时,速度会比较慢。我们现在来尝试从另一种思路来寻求一种更高效的方法。
我们可以换一种思路,分别求每位出现1的次数,然后再将每位出现1的次数相加即是所求。 不妨假设要求的数是abcde(a>0),一般地,我们求第3位,也就是百位数字出现1的次数,可分为如下三种情况:
(1),当c=0 时,则该位出现1的数分析如下:
00100--00199
01100--01199
02100--02199
……
0b100--0b199
上面一共是b*100,对于a,我们进行类似的分析,从0b200到0(b+1)099的数字中,百位数字是不会出现1的:
0(b+1)100--0(b+1)199
0(b+2)100--0(b+2)199
……
0(b+9)100--0(b+9)199
0(b+10)100--0(b+10)199即1b199
从0b200到1b199,共有10*(b*100)个百位数字为1的数字。那么类似的可以知道,从1b200到2b199同样有10*b*100个百位数字为1的数字。依次类推,从2b200到3b199,……,(a-2)b200到(a-1)b199,由于c=0,因此百位出现1的最大的数字应该为a(b-1)199;那么一共有多少个这样的数据段呢?应该比较容易看出来,一共有a个。由此可以看出当c=0时,低位数字是不影响本位数字为1的数字的个数的。
由以上分析可知,百位数字为1的数字共有a*10*100+b*100=ab*100个;
(2),当c=1时,则该位出现1的数分析如下:
在(1)情况分析的基础上,因为c=1,所以从a(b-1)200到ab1de中,仍有百位数字为1的数字存在,且比较容易知道一共有de+1个:即从ab100一直到ab1de,由此可以发现,此时低位数字影响了本位数字为1的数字的个数。
所以,此种情况,百位数字为1的数字共有:ab*100+de+1
(3),当c>1时,则该位出现1的数分析如下:
仍然在(1)分析的基础上,因为c>1,所以从a(b-1)200到ab199(因为c>1,所以abcde>ab199,而ab200到abcde中百位数字是不会出现1的)中,仍有1*100个百位数字为1的数字,在此情况下,我们同样可以发现,此时低位数字又不影响本位数字为1的数字的个数了。
所以,此种情况,百位数字为1的数字共有:ab*100+1*100=(ab+1)*100.
分析到这里,我想就应该比较容易写出程序了吧^_^
转载于:https://blog.51cto.com/10622551/1694395
在从1到n的正数中1出现的次数相关推荐
- 程序员面试题精选100题:求从1到n的正数中1出现的次数
// 程序员面试题精选100题(25):求从1到n的正数中1出现的次数 // 如 f(253) = (2!=0) * 100 + 2 * f(99) + (5!=0) * 10 + 5 * f(9) ...
- python从1到n出现了多少个1-【算法21】从1到n的正数中1的出现次数
[题 目]输入一个整数n,求从1到n这n个正数中,1出现的次数.例如:输入12,出现一的数字有1,10,11,12共有5个1,则输出5. [思 路1]几乎所有的算法题目都有很直观容易想到的方法,当然这 ...
- 【算法21】从1到n的正数中1的出现次数
[题 目]输入一个整数n,求从1到n这n个正数中,1出现的次数.例如:输入12,出现一的数字有1,10,11,12共有5个1,则输出5. [思 路1]几乎所有的算法题目都有很直观容易想到的方法,当 ...
- 程序员面试题精选100题(25)-在从1到n的正数中1出现的次数[算法]
题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数. 例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次. 分析:这是一道广为流传的google ...
- 求一个字符串中连续出现的次数最多的子串
求一个字符串中连续出现的次数最多的子串.例如字符串"abababc",最多连续出现的为ab,连续出现三次.要和求一个字符串中的最长重复子串区分开来,还是上面的字符串,那么最长的重复 ...
- shell最大出现和连续出现次数_从 1 到 n 整数中 1 出现的次数
题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了. ...
- 剑指offer:整数中1出现的次数(从1到n整数中1出现的次数)
题目描述 求出1-13的整数中1出现的次数,并算出100-1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了. ...
- 【刷算法】整数中1出现的次数(从1到n整数中1出现的次数)
题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了. ...
- java 循环list 对象_java计算list集合中重复对象的次数及for循环内外创建对象
我的需求:计算字符串集合中"数值"出现的次数,然后在for循环中计算"数值"及出现的次数 解决方案: 1.使用collections类中的frequency(集 ...
最新文章
- html5画布画点,在HTML5画布上绘制一个点
- extern相关问题
- 二叉树的先序建树后序输出
- Linux连接状态为syn_recv,linux 服务器 syn*** 大量SYN_RECV状态处理
- RabbitMQ——work queue
- IOS多选单选相册图片
- MSSQL从2000升级到2005丢失数据库关系图的解决方案
- 最简单求100以内质数算法
- MYSQL基础教程书籍
- 利用Matlab筛选给定条件的数据
- 【简记】Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirrorlist: No URLs in
- 数据挖掘-朴素贝叶斯算法
- linux网卡slave状态,生产环境中linux bonding 主备模式slave网卡切换的方法
- 2020煤矿安全监测监控模拟考试题库及煤矿安全监测监控作业考试题库
- 细细私语,看喜欢的书
- 个体工商户注册后,都需做哪些事呢?这3点很重要
- 微信在后台疯狂读取用户隐私?专家:乌龙!是苹果系统升级的锅...你怎么看?...
- 《阿里云代码安全白皮书》5个维度应对3类代码安全问题
- ZC706开发板SI5324配置
- linux-运维探针监控工具
热门文章
- python中列表数据汇总和平均值_python的列表List求均值和中位数实例
- c++17新特性_每个开发者都应该了解的一些C++特性
- 优朋普乐大数据_优朋普乐黑维炜:互动电视市场已进入成熟发展期
- python 论坛模板_python模板 - PH的个人空间 - OSCHINA - 中文开源技术交流社区
- win7查看隐藏文件_隐藏在电脑里の秘密,放在你眼前,你也发现不了,就是这么奥给力...
- c 结构体 不允许使用不完整的类型_.NET Core 基础类型介绍
- 赋能‘元宇宙’,这些企业强势破圈 | 2021AI 最佳成长榜
- 北京黑马计算机培训宿舍图案,黑马经典图形!
- android 按键会触发ontouch吗?_这次,我把Android事件分发机制翻了个遍
- 2019年末逆向复习系列之今日头条WEB端_signature、as、cp参数逆向分析