求 n! 的计算结果有几个后缀0.
可以发现,一个5和一个2的乘积,可以获得一个0.
考虑10! :
10! = 362880 有两个后缀0. 这是因为这10个连乘数里,有5和10, 它们分解质因数后可以获得2个5.
注:我们前面提到一个5和一个2的乘积,容易想到的,将这么多的连乘数分解质因数,2的数量是远大于5的数量的
考虑25! :
这里的5, 10, 15, 20, 25可以分解出6个5, 所以25!应该有6个后缀0.
代码:
class Solution
{
public:
int trailingZeroes(int n)
{
int ret = 0, factor = 1;
for ( ; n / pow(5, factor) > 0; ++ factor)
{
ret += n / pow(5, factor);
}
return ret;
}
};LeetCode 172. Factorial Trailing Zeroes
原文地址:http://blog.csdn.net/stephen_wong/article/details/45023001