题目描述
给定一个整数 n,返回 n! 结果尾数中零的数量。
示例 1:
输入: 3
输出: 0
解释: 3! = 6, 尾数中没有零。
示例 2:
输入: 5
输出: 1
解释: 5! = 120, 尾数中有 1 个零.
说明: 你算法的时间复杂度应为 O(log n) 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/factorial-trailing-zeroes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
末尾要得出0,那么因子中必然要有2和5。从1开始数,每连续两个自然数就有一个2的倍数,而每连续五个自然数才有一个5的倍数,所以2的个数要比5的个数多得多。
所以这道题就变为计算n!中有多少个5因子。在1~n 中,有n/5个含有因子5的数;然而对于25、125这样的数,可以提出多个5因子。比如25!,25/5=5,说明1 ~25中有5个数含有因子5,即5、10、15、20、25,然而25中能提出2个5,所以还要再加上一个5,即
25
/
5
2
25/5^2
25/52。所以最终n!中5因子的个数为
n
/
5
+
n
/
5
2
+
n
/
5
3
.
.
.
n/5+n/5^2+n/5^3...
n/5+n/52+n/53...
代码(c++)
class Solution {
public:
int trailingZeroes(int n) {
int res=0;
int temp=n;
while(temp>=5){
res+=temp/5;
temp/=5;
}
return res;
}
};