求1的个数
2015-06-04 17:39
155 查看
题目:
给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。
要求:
写一个函数 f(N) ,返回1 到 N 之间出现的 “1”的个数。例如 f(12) = 5。
在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少。
思路:
随机输入一个整数N,从1到N分别计算各个数1出现的次数;
对每个数,从个位开始计算,然后除以10取证继续从个位计算,直至出现最终结果。
总结:该思路较为简单,就是计算每一个数拥有1的数量,最后累加得出结果,但是当N的数量变得很大时,程序运行效率极低,得出结果会花费大量的时间。
该代码不是很理想,而另一个思路是每一位出现1的次数个他的高低位都有关,但目前为止没有实现这个思路的代码。
给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。
要求:
写一个函数 f(N) ,返回1 到 N 之间出现的 “1”的个数。例如 f(12) = 5。
在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少。
思路:
随机输入一个整数N,从1到N分别计算各个数1出现的次数;
对每个数,从个位开始计算,然后除以10取证继续从个位计算,直至出现最终结果。
#include<iostream> using namespace std; int main() { int icount = 0, i, N, temp; cout << "Please input the integer N,N="; cin >> N; for (i = 1; i <= N; i++) { temp = i;//用临时变量记录i的值 while (temp != 0)// { icount += (temp % 10 == 1) ? 1 : 0;//计算个位1出现的次数 temp /= 10;//将计算完的位数去掉(降位),继续计算剩下位数的个位是否出现1 } } cout << icount << endl; return 0; }
总结:该思路较为简单,就是计算每一个数拥有1的数量,最后累加得出结果,但是当N的数量变得很大时,程序运行效率极低,得出结果会花费大量的时间。
该代码不是很理想,而另一个思路是每一位出现1的次数个他的高低位都有关,但目前为止没有实现这个思路的代码。
相关文章推荐
- linux系统进程的内存布局
- hdu 2842(矩阵快速幂+递推)
- andorid 自定义SwitchButton
- MyISAM和InnoDB存储引擎的区别
- gulp-notify处理报错----gulp系列(二)
- 【内存管理】:谁应该写在viewDidUnload里,谁应该写在dealloc里,arc之后viewDidUnload怎么用
- Dynpro-通过向导创建数据表格
- nodejs创建包(建立nodejs工程)
- Digital Roots
- squid缓存设置--控制页面的缓存时间
- Android的Toast介绍-android学习之旅(三十六)
- XCode 模拟器修改为英文版本
- 超人学院Hadoop大数据资源分享
- Android的Toast介绍-android学习之旅(三十六)
- Android的Toast介绍-android学习之旅(三十六)
- 新版本eclipse无法安装FatJar插件的问题
- Longest Substring Without Repeating Characters
- jdk自带常用命令行工具使用
- 子控件超出父控件的事件响应
- Load balance in BW system