阶乘的笔试题

这篇博客探讨了计算阶乘末尾零的数量的方法,包括两种策略:一是通过分析5的倍数出现的频率,二是利用斯特林公式进行估算。通过具体的例子,解释了如何确定100!的末尾有多少个零,并提供了相应的代码实现。
摘要由CSDN通过智能技术生成

(1)n!末尾有多少个0?

这道题可以参考《编程之美》2.2节“不要被阶乘吓倒”。

用数学语言描述解法对我来说,太艰难了。我这里只是举例子(n=100)加以说明。


方法一:在1~100中,5*2=10, 10*1=10, 15*2=30, 20*1=20, 25*4=100,...100*1=100

这里注意到,只要是能够被5整除的数,都会在末尾产生0,其中25和100(其实还有50,75)会在末尾产生2个0。因此,能够被25(5*5)整除的数会在末尾产生2个0,同理,能够被125(5*5*5)整除的数会在末尾产生3个0,能够被5^x整除的数会在末尾产生x个0.

因此方法一的算法如下:

在1~100中,对于每个能够被5整除的数(初始值为5,步进为5的所有数都能够被5整除,至于其他数,因为不能被5整除,所以能在末尾产生0的个数为0,也就不需要考虑),考察能够被5整除多少次,如75,75/5=15, 15/5=3, 3/5=0, 所以75能够被5整除2次。

将被5整除的次数加起来就是末尾0的个数。


方法二:100/5=20,也就是1~100中能被5整除的个数有20个,20/5=4,也就是1~100中能被25(5^2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值