分析
末尾想要产生0,那么必然两个数相乘为0,比如2*5,4*5,6*5。。。总之一定要有5,每个2, 5
对就能形成一个末尾0,解决这个问题就在于找出100内有多少个2, 5
对。由于1至100的数中2的因子远远超过5,那只需要看1~100中间可以分解出多少个5就可以了。
题解中给出的求解因子 5 的个数的方法是用 n 不断除以 5, 直到结果为 0, 然后把中间得到的结果累加. 例如, 100/5 = 20, 20/5 = 4, 4/5 = 0, 则 1 到 100 中因子 5 的个数为 (20 + 4 + 0) = 24 个, 即 100 的阶乘末尾有 24 个 0. 其实不断除以 5, 是因为每间隔 5 个数有一个数可以被 5 整除, 然后在这些可被 5 整除的数中, 每间隔 5 个数又有一个可以被 25 整除, 故要再除一次, ... 直到结果为 0, 表示没有能继续被 5 整除的数了.
直觉上:5, 10, 20, 25, ... 90, 95, 100
这20个数字内有5因子。但需要注意的是25, 50, 75, 100
这4个数含5 * 5
也就是两个5因子,所以要算两次。
综上,100内含24个5因子,所以24个2, 5
对,也就是100!有24个末尾0.
推广
如果把问题从100!
推广到N!
呢?
同样要考虑2, 5
对, 考虑含5因子的数量。
继续不断除以 5,直到结果为 0,中间的商加起来就是答案。