问题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)