编程之美--2.2 不要被阶乘吓倒

来源:互联网 发布:网吧优化工具 编辑:程序博客网 时间:2024/05/16 05:26
问题1 计算阶乘N 末尾有几个0


1 直接考虑到生成0质因数只可能是2和5,然后5肯定比2出现的少;所以计算N!中所有数有多少个质因数5就代表有几个零。

根据上面分析的代码如下:

public static int method1(int n){int ans =0;for(int i=1 ;i<=n;i++){int temp =i;while(temp%5 ==0){ans ++;temp/=5;}}return ans;}

2 看一个25!。可以看到其中提供5的就只有5和10,15,20,25。其中5,10,15,20提供一个5,25提供两个5。可以想到,25/5 代表的是有几个提供5质因素,然后把25/5再/5 代表提供之前的5前提下再提供一个5的数量。

由上特例+书上总结,得到代码:

public static int method2(int n){int ans = 0;while(n!=0){ans += n/5;n/=5;}return ans;}

问题1 计算阶乘N 二进制最低位为1


1 相当于求解N! 的质因素2的个数,方法可以同上面分析。

2 方法二的解法可以参考,面试时候是想不到的。

3 相关题目:和书上说的一样。2的方幂(n&(n-1))==0)



0 0
原创粉丝点击