题目
给定一个整数 n ,返回 n! 结果中尾随零的数量。
进阶:你可以设计并实现对数时间复杂度的算法来解决此问题吗?
示例
输入:n = 3
输出:0
解释:3! = 6 ,不含尾随 0
输入:n = 5
输出:1
解释:5! = 120 ,有一个尾随 0
输入:n = 0
输出:0
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/factorial-trailing-zeroes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
方法1
- 两个数相乘结果末尾有 0,一定是因为两个数中有因子 2 和 5,因为 10 = 2 x 5。
- 问题转化为:n! 最多可以分解出多少个因子 2 和 5?
- 这个主要取决于能分解出几个因子 5,因为每个偶数都能分解出因子 2,因子 2 肯定比因子 5 多得多。
- 问题转化为:n! 最多可以分解出多少个因子 5?
Java实现
class Solution {
public int trailingZeroes(int n) {
int res = 0;
long divisor = 5;
while (divisor <= n) {
res += n / divisor;
divisor *= 5;
}
return res;
}
}