Given an integer n, return the number of trailing zeroes in n!.
Note that n! = n * (n - 1) * (n - 2) * … * 3 * 2 * 1.
- 考虑所有参与阶乘运算数的质因数分解
- 当存在一对质因数2,5时,则最终结果末尾多一个0
- 显然质因数2比质因数5要多,所以只需要统计质因数5即可。
- 可以求出小于等于n且是5的倍数的所有数的个数为 n / 5 n/5 n/5,他们至少具有一个质因数5
- 而每隔25个数,他们的质因数中会多一个5
- 每个 5 3 = 125 5^3=125 53=125个数,他们的质因数中又会多一个5
- 以此类推
AC代码如下:
public int trailingZeroes(int n) {
int ans = 0;
while(n!=0)
{
ans += n/5; //等价于分别计算n/5,n/25,n/125......
n/=5;
}
return ans;
}