课堂练习之找数字0-N中“1”出现的次数
2015-05-04 19:03
225 查看
一、题目与要求
题目:给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。
要求:1.写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数。例如 f(12) = 5。
2.在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少。
二、设计思路
第一种思路:
模10,除10取余,然后寻找规律,
9%10=9、9/10=0;
11%10=1、11/10=1;
15%10=5、15/10=1;
······
然后写了很多,想到如果模10等于0怎么办?等于1怎么办?取余怎么办,判断条件怎么写?
捣鼓了好长时间没有弄明白。
第二种思路(老师上课讲的思路):
f(13)=2+4=6
f(23)=3+10=13
f(33)=4+10=14
f(93)=10+10=20
……
某一位上1的个数与其位上的数字、其高一位上的数字、其低一位上的数字数字有关,最后编程实现如下:
三、源代码
四、运行结果
五、心得体会
像这一类的题目,找到规律很重要,找到规律就对代码实现以及代码优化就会有很大的帮助,面对不要急着上来就写代码,一定要先在下边动手写写,寻找以下规律。
题目:给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。
要求:1.写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数。例如 f(12) = 5。
2.在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少。
二、设计思路
第一种思路:
模10,除10取余,然后寻找规律,
9%10=9、9/10=0;
11%10=1、11/10=1;
15%10=5、15/10=1;
······
然后写了很多,想到如果模10等于0怎么办?等于1怎么办?取余怎么办,判断条件怎么写?
捣鼓了好长时间没有弄明白。
第二种思路(老师上课讲的思路):
f(13)=2+4=6
f(23)=3+10=13
f(33)=4+10=14
f(93)=10+10=20
……
某一位上1的个数与其位上的数字、其高一位上的数字、其低一位上的数字数字有关,最后编程实现如下:
三、源代码
//hanxuedong #include<iostream.h> int Count(int n) { int count=0; //对1的个数计数 int now=1; //N由最低位到最高位此时对应第now位 int l=0; //第now位的低一位的数字 int nownum=0; //第now位的数字 int h=0; //第now位的高一位的数字 if(n<=0) { return 0; } while(n/now!=0) { l=n-(n/now)*now; nownum=(n/now)%10; h=n/(now*10); if(nownum==0) { count+=h*now; } else if(nownum==1) { count+=h*now+l+1; } else { count+=(h+1)*now; } now*=10; } return count; } void main() { int number; cout<<"请输入数字:"; cin>>number; cout<<"0--"<<number<<"中1出现的次数为:"<<Count(number)<<endl; }
四、运行结果
五、心得体会
像这一类的题目,找到规律很重要,找到规律就对代码实现以及代码优化就会有很大的帮助,面对不要急着上来就写代码,一定要先在下边动手写写,寻找以下规律。
相关文章推荐
- 【C代码练习17】输入数量不确定的0-9范围内的整数,统计每一种数字出现的次数,输入以-1结束
- 数据结构练习(35)数组中出现次数超过一半的数字
- 简单题练习——数字在排序数组中出现的次数
- 练习三:统计字符串中字符中 大写字符 小写字符 数字 其他字符 出现的次数
- 基础题练习——数组中出现次数超过一半的数字
- 课堂练习——寻找1出现的次数
- go语言之map练习之(一):统计字母、数字等Unicode中不同的字符类别出现的次数
- 数组中出现次数超过一半的数字
- 剑指offer-面试题29 找到数组中出现次数超过一半的数字-1
- 【代码】统计文件中,不同字符出现的次数(可排序,没有处理英文单词、数字和大小写)
- 剑指offer系列之36:数字在排序数组中出现的次数
- 数组中出现次数超过一半的数字
- 【剑指offer】数组中出现次数超过一半的数字
- 练习:输出整数每一位,计算算数,9出现次数,输出图案,水仙花数
- 数组中出现次数超过一半的数字
- 微软等数据结构+算法面试100题(23)--数组中超过出现次数超过一半的数字
- 【Java版本】二分查找&数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 剑指offer-数字在排序数组中出现的次数
- Introduction to Java Programming编程题6.3<计算数字的出现次数>