求一个数字中1的个数
2015-06-04 19:58
351 查看
输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。
如18出现了1 10 11 12 13 14 15 16 17 18 总计10次
例如一个5位数x=48292
万位数 10000-19999共有10000个
千位数 5*(1000)此时万位数的取值可以是0 1 2 3 4 共5个所以有5种
百位数 00100-48292 共有100*49
十位数 00010-48292 共有482*10
个位数4830*1
总计10000+5000+4900+4820+4830
规律
c >1: 00 1 00 -- ab 1 99,共计 (ab+1)*100种,其中(ab+1)表示万千位可以取00-ab,共计ab+1种。因为c>1所以 ab199<abcde,所以这些数都是在1 -- abcde范围内。
c=0: 00 1 00 -- a (b-1) 1 99, 总共有ab*100种,而a(b-1)200-ab099之间,都没有百位=1的数字出现了。
c=1: 我们可以把c = 1的数字分成以下2种情况之和
00 1 00 -- a(b-1)1 99 :总共ab * 100种可能性;
a(b-1) 2 00 -- ab 0 99:这段数字中百位=1的的数字数目为0;
ab 1 00 -- ab 1 cd:共计cd+1种可能性;
所以c =1的数字数目,等于c=0的数字数目,加上abcde%100 +1。
如18出现了1 10 11 12 13 14 15 16 17 18 总计10次
例如一个5位数x=48292
万位数 10000-19999共有10000个
千位数 5*(1000)此时万位数的取值可以是0 1 2 3 4 共5个所以有5种
百位数 00100-48292 共有100*49
十位数 00010-48292 共有482*10
个位数4830*1
总计10000+5000+4900+4820+4830
规律
c >1: 00 1 00 -- ab 1 99,共计 (ab+1)*100种,其中(ab+1)表示万千位可以取00-ab,共计ab+1种。因为c>1所以 ab199<abcde,所以这些数都是在1 -- abcde范围内。
c=0: 00 1 00 -- a (b-1) 1 99, 总共有ab*100种,而a(b-1)200-ab099之间,都没有百位=1的数字出现了。
c=1: 我们可以把c = 1的数字分成以下2种情况之和
00 1 00 -- a(b-1)1 99 :总共ab * 100种可能性;
a(b-1) 2 00 -- ab 0 99:这段数字中百位=1的的数字数目为0;
ab 1 00 -- ab 1 cd:共计cd+1种可能性;
所以c =1的数字数目,等于c=0的数字数目,加上abcde%100 +1。
相关文章推荐
- 【C语言/算法之 01 背包】完全背包
- 数据验证控件
- linux下 apache的安装过程
- POJ 1308 Is It A Tree?
- java中serializable解析及用途
- 记住密码和自动登录效果
- sdut 2054 多项式求和
- hdu 2254(矩阵快速幂+分治)
- (10.3.5.4)产品需求文档的写作(四) – 撰写文档(PRD文档)
- (3486)HDU
- js-数组去重
- J2EE中ssh的整合
- HDU 1443 Joseph
- 聚集索引和非聚集索引
- (10.3.5.5)产品需求文档的写作(五) – 用例文档(UML用例图、流程图)
- php面向对象(OOP)—static和const
- 【leetcode每日一题】NO141.Linked List Cycle
- [Machine Learning] Learning to rank算法简介
- (10.3.5.3)产品需求文档的写作(三) – 原型设计(手绘原型,灰模原型,交互原型)
- 一些树的知识