审题:
需要我们找出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给除掉。
算法题(45):阶乘后的零
于 2025-01-24 13:05:52 首次发布