题目:
设计一个算法,计算出n阶乘中尾部零的个数
样例:
$11! = 39916800$,因此应该返回 2
思路:
这是一个数学问题,十进制尾数得到0的只有$2*5$,将阶乘的每个因素分解质因数,明显得到2的数量多于5的数量,所以,这个问题就变成了有多少个5的问题。
可以是5,25,125...为什么这样?比如$26!$:25其实可以分解成2个5相乘,而$26/5$只计算了一个5,因此还要再加$26/25$$.
参考思路:
class Solution {
public:
/*
* @param n: A long integer
* @return: An integer, denote the number of trailing zeros in n!
*/
long long trailingZeros(long long n) {
// write your code here, try to do it without arithmetic operators.
/*这是一个数学问题,十进制尾数得到0的只有2*5,将阶乘的每个因素分解质因数,明显得到2的数量多于5的数量,所以,这个问题就变成了有多少个5的问题。可以是5,25,125...为什么这样?比如26!:25其实可以分解成2个5相乘,而26/5只计算了一个5,因此还要再加26/25.*/
long long sum = 0;
long long t=5;
while(t<=n){
sum += n/t;
t = 5*t;
}
return sum;
}
};
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。