11. Factorial
这个题同样非常简单,就是求一个数的阶乘的尾部有多少个0.
思路是有2*5才会出0,然后2肯定比5多,所以就是数N!中有多少个因子5.
关于如何数出因子5的个数中http://www.chinaunix.net/old_jh/23/926848.html这篇文章介绍的非常详细。我就不谈了,不过想说写程序和算法是两个非常不同的工作,我现在的目标是,大概看一下前人的成法,主要完成编程工作。
最终推出的计算公式为:
当$0 < n < 5$时,$f(n!) = 0$;
当$ n > 5$ 时, $f(n!) = k + f(k!)$,其中$k = \frac{n}{5}$
EX:
$f(100!) = 20 + f(20!) = 20 + 4 + f(4!) = 24$
Sample Input:
6 3 60 100 1024 23456 8735373
第一行是底下输入的行数,后边就是要阶乘求结尾0个数的数。
# Filename: SPOJ11 Factorial import sys t = int(sys.stdin.readline()) for i in range (0, t): n = int(sys.stdin.readline()) x = 0 while (n): n = n/5 x = x + n print x