阶乘尾数
题目描述
设计一个算法,算出 n 阶乘有多少个尾随零。
示例 1:
输入: 3 输出: 0 解释: 3! = 6, 尾数中没有零。
示例 2:
输入: 5 输出: 1 解释: 5! = 120, 尾数中有 1 个零.
说明: 你算法的时间复杂度应为 O(log n) 。
解法:
5 10 15 25 … 这样的数乘以 2 的倍数就会产生 10 的倍数。另外,能被 5 整数的数远比能被 2 整除的数要少。因此一个数中含有因子 5,此数就能与某个偶数相乘得到一个 10,阶乘的结果中就会产生一个 0。另外 25 中包含两个 5, 25 * 2 * 4 = 200
。
每隔 5 个数,就有一个含因子 5 的,每隔 25 个数,就有一个含两个因子 5 的。因此,n/5 + n/25 + n/125 + ...
就是答案。
class Solution {
public:
int trailingZeroes(int n) {
int num = 0;
while(n >= 5){
n = n / 5;
num += n;
}
return num;
}
};