算法题(45):阶乘后的零

审题:

需要我们找出n的阶乘结果的尾随0的个数,若阶乘结果为0则返回0

思路:
方法一:先求阶乘再判断0的个数(无法通过)

因为阶乘满足:n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1

所以我们可以从i=1开始循环进行运算,sum*=i,最后sum就是所求的阶乘值。

然后我们用一个while循环判断出0的个数即可

方法二:数学方法(可通过)

因为所有的尾随0都来自10这个数和其他任意数相乘,换言之,我们只需要知道有多少个10就知道有多少个尾随0.

而所有的10都是来自2*5的,换言之我们只需要知道有多少对2和5,而对数是由两者中出现次数较少的那一方决定的,2的出现次数是比5多的,所以最后我们就转换成寻找5的出现次数

解题:

方法一:超时

方法一超时的原因是数据量太大了,所有整形都存不下,包括long long等。

方法二:数学法

当该数中还有质因数5存在,x%5是等于0的,而当数中没有5了,结果就会是其他,比如3%5==3。而x/=5可以把已经计算入的5给除掉。

172. 阶乘后的零 - 力扣(LeetCode)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值