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

问题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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值