软件工程课堂练习--找“一”
2015-05-03 19:00
162 查看
一、题目要求
给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数
要求:
1.写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数。例如 f(12) = 5。
2.在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少
二、设计思路
通过列举,不难发现有如下规律
1.一位十进制数:当N>=1时,f(N)=1;当N=0时,f(N)= 0;
2.两位十进制数:f(13)=个位出现1的个数+十位出现1的个数=2+4=6;
f(23)=个位出现1的个数+十位出现1的个数=3+10=13;
......
f(93)=个位出现1的个数+十位出现1的个数=10+10=20;
3.三位十进制数:f(123)=个位出现1的个数+十位出现1的个数+百位出现1的个数=(10+10)*1+(3+10)+24=57;
f(199)=...=(10+10)*2+100;
f(203)=...=(10+10)*2+1+100;
f(213)=...=(10+10)*2+(2+4)+100;
......
f(303)=...=(10+10)*3+(1)+100;
......
4.f(abcde),计算c位上的1的个数,需要看ab、c、de的情况:
当c=0时,受高位影响,百位上出现1的个数为:(ab)*100;
当c=1时,受高位和低位影响,百位上出现1的个数为:(ab)*100+((cde)+1);
当c>1时,受高位影响,百位上出现1的个数为:((ab)+1)*100;
三、程序部分代码
一下为计算1出现次数的部分代码
四、截图
五、实验总结
根据老师的提示将数字分开看,分别看个位和十位..中“1”出现的次数,依次列举出来,很容易的就能找到规律
给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数
要求:
1.写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数。例如 f(12) = 5。
2.在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少
二、设计思路
通过列举,不难发现有如下规律
1.一位十进制数:当N>=1时,f(N)=1;当N=0时,f(N)= 0;
2.两位十进制数:f(13)=个位出现1的个数+十位出现1的个数=2+4=6;
f(23)=个位出现1的个数+十位出现1的个数=3+10=13;
......
f(93)=个位出现1的个数+十位出现1的个数=10+10=20;
3.三位十进制数:f(123)=个位出现1的个数+十位出现1的个数+百位出现1的个数=(10+10)*1+(3+10)+24=57;
f(199)=...=(10+10)*2+100;
f(203)=...=(10+10)*2+1+100;
f(213)=...=(10+10)*2+(2+4)+100;
......
f(303)=...=(10+10)*3+(1)+100;
......
4.f(abcde),计算c位上的1的个数,需要看ab、c、de的情况:
当c=0时,受高位影响,百位上出现1的个数为:(ab)*100;
当c=1时,受高位和低位影响,百位上出现1的个数为:(ab)*100+((cde)+1);
当c>1时,受高位影响,百位上出现1的个数为:((ab)+1)*100;
三、程序部分代码
一下为计算1出现次数的部分代码
while (n/factor!=0) { LowerNum=n-(n/factor)*factor; CurNum=(n/factor)%10; HigherNum=n/(factor*10); switch (CurNum) { case 0: count=count+HigherNum*factor; break; case 1: count=count+HigherNum*factor + LowerNum +1; break; default: count=count+(HigherNum+1)*factor; break; } factor=factor*10; } return count; }
四、截图
五、实验总结
根据老师的提示将数字分开看,分别看个位和十位..中“1”出现的次数,依次列举出来,很容易的就能找到规律
相关文章推荐
- 软件工程课堂练习--四则运算(三)
- 软件工程课堂练习找水王续
- 软件工程课堂练习-随机生成30道四则运算练习题
- 软件工程课堂练习--结对开发
- 软件工程课堂练习--找出“水王”
- 软件工程课堂练习---二维数组子数组和的最大值,连续就好
- 软件工程课堂练习&课下作业
- 软件工程课堂练习——结队开发二
- 软件工程课堂练习——N层电梯只停一层求乘客爬楼层数最少(基本方法+优化方法)
- 软件工程课堂练习1
- 软件工程课堂练习 图书折扣问题
- 软件工程个人作业4(课堂练习&&课堂作业)
- 软件工程课堂练习
- 软件工程课堂练习-最高折扣
- 软件工程课堂练习——找出1-n中1出现的个数
- 软件工程课堂练习--结对初体验
- 软件工程课堂练习——求买书最低价格
- 软件工程--课堂练习之四则运算之续编
- 软件工程课堂练习--四则运算单元测试
- 软件工程课堂练习:返回一个一维整数数组中最大子数组的和