求1的个数问题
来源:互联网 发布:广东网络报警电话号码 编辑:程序博客网 时间:2024/05/21 17:00
《编程之美》中有一个求1出现次数的问题,给定一个十进制正整数N,写下从1到N的所有正整数,然后数一下其中1出现的次数;如果将这个问题稍微改变一下,要求数一下其中含有1的数字的个数;比如N=12,f(N)=4,(1, 10, 11, 12)
看起来问题基本一样,但实际上两者还是有很大的不同的,改变后的问题应该说是一个排列组合问题;
这里给出一种解法:
首先现将问题转化为:求不含1的数的个数
设N=high ow
从最高位high开始,设当前共有bit+1位
1. 求出0~high999..之间不含1的数的个数,由组合问题可知,一共有:high*9^bit..,个
2. 由1求出的数,由于多计算了N+1~high999这些数字,需要将这些数字减去
2.1 如果high=1,那么这些数字都含1,直接忽略;
2.2 否则:
考虑到这些数字的最高为都是high,且不为1,可以略去,因此就变为了计算F(999..)-F(low);
F(999..)容易计算,值为9^bit;
算法复杂度是O(bit),可视为常数;
现在求出了0~N之间不含1的数字个数;0~N一共有N+1个数字
那么f(N) = N+1 - F(N)
根据思路写出程序如下:
- 求1的个数问题
- 求1的个数
- 问题:求一个数的二进制中1的个数。
- 求二进制中1 的个数 及扩展问题
- 求大数的约数个数问题
- 求一个数的因数个数问题
- 求n以内的素数个数问题
- 求 1 出现的个数
- 2.1求1的个数
- 二进制求1的个数
- 求约数个数问题
- 求(1~n)个数中1的个数
- 求1的个数的算法题
- 求整数的二进制1的个数
- 编程中移位运算解决的问题(如何求整型变量中1的个数)
- 一道简单的求约数的个数问题
- 求二进制数中1的个数
- 求二进制数中的1的个数
- 如何得到照相机抖动效果
- Silverlight - DataTable
- css中 position: 的应用
- Design?Design!
- VS2005下使用dynamic_cast
- 求1的个数问题
- Hadoop HBase-0.20.0 Performance Evaluation
- Access与SQL Server的一点区别
- C#生成指定数目的互不相同的随机数
- C#中对DatagridView部分常用操作
- there was an error starting the gnome setting deamon
- Android下图形系统
- AS 读取XML,中文显示为乱码的解决办法
- C语言获取系统时间的几种方式