求 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