题目:
设计一个算法,算出 n 阶乘有多少个尾随零。
示例 1:
输入: 3 输出: 0 解释: 3! = 6, 尾数中没有零。
示例 2:
输入: 5 输出: 1 解释: 5! = 120, 尾数中有 1 个零.
说明: 你算法的时间复杂度应为 O(log n) 。
思路:直接计算阶乘的值,再对10取余,这样虽然能够计算出尾零的个数,但是达不到时间复杂度的要求。即更换思路:10会有一个0,10 = 2 *5; 5大于2,5的因子个数肯定小于等于2的因子个数。本质就是求有多少个5的因子。
具体代码:
class Solution {
public int trailingZeroes(int n) {
/* 10会有一个0,10 = 2 *5; 5大于2,5的因子个数肯定小于等于2的因子个数。
本质就是求有多少个5的因子。*/
int count = 0;
while (n != 0){
n /= 5;
count += n;
}
return count;
}
}