编程之美2.2学习笔记
来源:互联网 发布:外国留学生来中国数据 编辑:程序博客网 时间:2024/05/13 10:45
阶乘问题:
1 给定一个整数N,那么N的阶乘N!末尾有多少个0呢?例如:N=10,N!=326800,n!的末尾有两个0。
2求N!的二进制表示中最低位1的位置。w
问题1的解法一
质因数分解:N!=2X*3Y*5Z....,由于10=2X5,所以M只跟X和Z相关,每一对2和5相乘可以得到一个10,于是M=min(X,Z).由于被2整除的概率大,所以M=Z。
代码入下:
ret=0;
for(i=1;i<=N;i++)
{
j=i;
while(j%5==0)
{
ret++;
j/=5;
}
}
公式2的解法:Z=[N/5]+[N/5的平方】+。。。。。
ret=0
while(N)
{
ret+=N/5;
N/=5;
}
问题2:
问题转化:
这个问题实质上等于N!含有质因数2的个数。即答案等于N!含有质因数2的个数加1。
int lowestOne(int N)
{
int Ret=0;
while(N)
{
N>>=1;
Ret+=N;
}
return Ret;
}
N!含有质因数2的个数,还等于N减去N的二进制表示中1的数目。
假设N=1011,那么N!中含有质因数2的个数为[N/2]+[N/4]+[N/8]+[N/16]+....
即1101+110+11+1
=(1000+100+1)+(100+10)+(10+1)+1
=(1000+100+10+1)+(100+10+1)+1
=1111+111+1
=(10000-1)+(1000-1)+(10-1)+(1-1)
=11011-(N二进制表示中1的个数)
- 编程之美2.2学习笔记
- 《编程之美》学习笔记
- 编程之美 学习笔记
- 《编程之美》学习笔记
- 编程之美学习笔记之2.1
- 编程之美 学习笔记1_1
- <编程之美>学习笔记1
- 编程之美 笔记
- 编程之美笔记
- 编程之美笔记
- 《编程之美》学习笔记之 最大公约数问题
- 《编程之美》学习笔记--控制CPU占用率
- 编程之美学习笔记-第二章(一)
- 《编程之美》学习笔记——中国象棋将帅问题
- 编程之美学习笔记(一): 1的数目
- 编程之美学习笔记(二):中国象棋将帅问题
- 《编程之美》学习笔记 1.2中国象棋将帅问题
- 《编程之美》学习笔记——指挥CPU占用率
- 著名编程语录
- 面向对象语言的特性
- SWT中的FormLayout
- 正则表达式 验证 电话,手机,邮箱,数字
- Eclipse快速上手指南之使用CVS
- 编程之美2.2学习笔记
- @SuppressWarnings 详解
- 栈内存指针的问题
- Hibernate的generator属性之意义
- 转]对linux信号编程有用:Linux中信号的个数
- MyPager js简单分页控件
- 对象的实例化的一点理解
- 程序员的宿命
- 转 linux信号测试小程序