题目地址
https://leetcode-cn.com/problems/factorial-trailing-zeroes/
题目描述:阶乘后的零
给定一个整数 n,返回 n! 结果尾数中零的数量。
示例:
例 1:
输入: 3
输出: 0
解释: 3! = 6, 尾数中没有零。
例 2:
输入: 5
输出: 1
解释: 5! = 120, 尾数中有 1 个零.
说明: 算法的时间复杂度应为 O(log n) 。
解答
这道题本质上属于一个数学题,构造数学模型十分重要。
对于阶乘而言,如何产生 0 ?
若 n > 5, 则必然会至少有一个 0, 因为 5!=120, 这是因为 5 与一个偶数结合,导致了0的出现。
推广一下:若当前数字因式分解可以分解出一个 5, 则必然会产生一个 0.
至此,我们只需要求出当前数字能拥有的 5 的个数即可。
class Solution {
public:
int trailingZeroes(int n) {
int res = 0;
while( n)
res += n/5, n/=5;
return res;
}
};