1到N中“1”出现的次数
2015-06-04 23:52
387 查看
题目:给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数
思路:刚开始做的时候,是想从1到N进行遍历,其中每个数都出现1的个数加起来,最后得出结果,但是老师让我们找规律,最后在网上搜索,发现了这个做法,找到小于N的数在每一位上可能出现1的次数之和,然后找到规律:假设N=abcde,如果要计算百位上出现1的次数,它和百位以下的数字,百位上的数字,百位以上的数字有关;
代码:
结果截图:
总结:这次的课堂练习能否成功我感觉主要和你会不会编程没有多大关系,主要是思想的实现,如何发现规律最重要;
思路:刚开始做的时候,是想从1到N进行遍历,其中每个数都出现1的个数加起来,最后得出结果,但是老师让我们找规律,最后在网上搜索,发现了这个做法,找到小于N的数在每一位上可能出现1的次数之和,然后找到规律:假设N=abcde,如果要计算百位上出现1的次数,它和百位以下的数字,百位上的数字,百位以上的数字有关;
代码:
#include<iostream> using namespace std; void main() { int N; cout<<"请输入一个数:"; cin>>N; int low=0;//低位数 int cur=0;//当前数 int high=0;//高位数 int count=0; int factor=1; while(N/factor!=0) { low=N-(N/factor)*factor; cur=(N/factor)%10; high=N/(factor*10); switch(cur) { case 0: count+=high*factor; break; case 1: count+=high*factor+low+1; break; default: count+=(high+1)*factor; break; } factor*=10; } cout<<"1到"<<N<<"之间1出现的次数为:"; cout<<count<<" "; cout<<endl; }
结果截图:
总结:这次的课堂练习能否成功我感觉主要和你会不会编程没有多大关系,主要是思想的实现,如何发现规律最重要;
相关文章推荐
- php浮点数精确运算
- Android 开发中,如何将 SQLite 和 APK 一起打包发布
- iOS: 剪裁UIImage部分不规则区域
- CRF的库资源
- stack, deque 和 queue的对比
- [SGU495] Kids and Prizes (概率dp)
- Lycn 2013 with SQL AlwaysOn 「一」建立AlwaysOn
- C语言之断言
- Java NIO系列教程(七) FileChannel
- [3]_人人都是产品经理
- yaf 路由协议配置测试
- 实验三 敏捷开发和XP实验
- php BC高精确度函数库
- [转载]js删除几种方式
- ANDROID开发:将数据库文件与项目包一起打包成APK文件
- 输入法
- Java NIO系列教程(五) 通道之间的数据传输
- Developing for Android, I: Understanding the Mobile Context
- asynTask标准实现下载文件到sdcard并显示进度条
- 反射 C#