如何判断1024!末尾有多少个0

这篇博客介绍了两种计算阶乘末尾零数量的方法。第一种暴力方法直接计算阶乘,但效率低且可能溢出。第二种是因子法,通过统计5的因子个数来确定末尾零的数量,避免了溢出问题。博主提供了Java实现的代码,并指出算法的时间复杂度为O(N)。此外,还引申讨论了如何计算任意N!末尾零的通用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分析:

方法一:暴力法

  简单的方法就是就算出1024!的值,然后判断末尾有多少个0.但是这种方法有两个非常大的缺点:第一算法效率非常低下;第二:当这个数字比较大的时候直接计算阶乘可能会导致数据溢出,从而导致计算结果出现偏差。因此,下面给出另外一种比较巧妙的方法。

方法二:因子法

  5与任何一个偶数相乘都会增加末尾0的个数,由于偶数的个数肯定比5的个数多,因此1~1024所有的数字中有5的因子的个数决定了1024!末尾0的个数。因此只需要统计因子5的个数即可。此外5与偶数相乘会使末尾增加一个0,25(有两个因子5)与偶数相乘使末尾增加两个0,125(有三个因子5)与偶数相乘会使末尾增加三个0,625(有四个因子5)与偶数相乘会使末尾增加四个0。

实现代码:

package lock;

public class T17 {
	public static int zeroCount(int n)
	{
		int count=0;
		while(n>0)
		{
			n=n/5;
			count+=n;
		}
		return count;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.print("1024!末尾的0的个数为:"+zeroCount(1024));

	}

}

运行结果:

在这里插入图片描述

算法分析:

  由于这种算法循环的次数为n/5,因此算法时间复杂度为O(N)。

引申:如何计算N!末尾有几个0?

  从上面的分析可以看出N!末尾的个数为N/5+N/5^2 +N/5^3+…+ N/5^m (5^m<N 且5^(m+1)>N)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值