leetcode172阶乘后的0
题目描述如下
给定一个整数 n ,返回 n! 结果中尾随零的数量。
提示 n! = n * (n - 1) * (n - 2) * … * 3 * 2 * 1
示例1
输入:n = 3
输出:0
解释:3! = 6 ,不含尾随 0
示例二
输入:n = 5
输出:1
解释:5! = 120 ,有一个尾随 0
解题思路
我们要看最终结果有多少个后缀0,其实就是看这些乘数有多少个10的因子,而10可以拆成2和5两个质因数。2的数目一定比5多(这还是蛮容易证明的),所以我们只要统计因子5的个数,比如n等于35的情况为:1x2x…x5x…x10x…15x…x20x…x25x…x30x…x35。从里面每个数种提出一个5来,共7个5就变成了1x2x3x4x5x6x7,再提出一个5来,变成了1。所以总共有5+1=6个5。所以最终肯定有6个0。我们可以根据这个思路去设计
class Solution {
public:
int trailingZeroes(int n) {
int count = 0;
while (n > 0)
{
n /= 5;
count += n;
}
return count;
}
};