1的数目问题
2015-06-21 21:45
323 查看
1.题目:
给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。
要求:
写一个函数 f(N) ,返回1 到 N 之间出现的 “1”的个数。例如 f(12) = 5。
在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少
思路
最初看见这个问题我感觉这个有规律的问题 肯定是存在了特殊的数字,包含着规律于是我想找到特殊数字于是我找到13
N=13 f(N)=2+4=6;
N=23 f(N)=3+10=13;
![](http://images0.cnblogs.com/blog2015/717059/201506/212144394987818.png)
N=33 f(N)=4+10=14;
.......
N=93 f(N)=10+10=20
发现这个规律
运行截图:
给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。
要求:
写一个函数 f(N) ,返回1 到 N 之间出现的 “1”的个数。例如 f(12) = 5。
在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少
思路
最初看见这个问题我感觉这个有规律的问题 肯定是存在了特殊的数字,包含着规律于是我想找到特殊数字于是我找到13
N=13 f(N)=2+4=6;
N=23 f(N)=3+10=13;
package yunsuan; import org.junit.Test; public class find1 { public int Count(int n){ int count = 0; int n1 = 1; int nN = 0; int gN = 0; int hN = 0; if (n <= 0){ return 0; } while (n / n1 != 0){ nN = (n - (n / n1)*n1); gN = ((n / n1) % 10); hN = (n / (n1 * 10)); if (gN == 0){ count += hN*n1; } else if (gN == 1){ count += hN*n1 + nN + 1; } else { count += (hN + 1)*n1; } n1 *= 10; } return count; } @Test public void fun(){ int i; for (i = 0; i < 2147483647; i++) { if (Count(i) == i) { System.out.println(i); } } } }
![](http://images0.cnblogs.com/blog2015/717059/201506/212144394987818.png)
N=33 f(N)=4+10=14;
.......
N=93 f(N)=10+10=20
发现这个规律
运行截图:
相关文章推荐
- linux命令行中命令
- 网络配置命令
- eclipse配置python开发插件
- Github学习
- 读后感—《人,绩效和职业道德》
- nginx或tomcat的性能优化调整详解
- 我该如何理解信号量机制中的P.V操作?????
- spring tx:advice 和 aop:config 配置事务
- 《人,绩效和职业道德》读后感
- 跨进程点击treeview节点
- 使用nntool神经网络工具箱建立单层感知器
- 如何理解 Tornado
- 《翻转课堂教学法》实施情况调查结果
- 网络-监听 解析
- 软负载与nginx那些强大的不可不说的功能
- [设计模式学习笔记]DECORATOR装饰模式
- 个人读后感
- 读《一个程序员的生命周期》连载------有感
- 一个球从100m高度自由落下……
- 网络-大文件下载(0621)