题目
设计一个算法,算出 n 阶乘有多少个尾随零。
示例 1:
输入: 3
输出: 0
解释: 3! = 6, 尾数中没有零。
示例 2:
输入: 5
输出: 1
解释: 5! = 120, 尾数中有 1 个零.
实现思路
首先最简单的暴力方法,我们求出n的阶层然后从后往前遍历找0 当不是0时结束遍历。但是有个问题,比如150的阶层数巨大,换个思路。
另一个思路:
找规律:
列出5的阶层过程
1 1*2 1*2*3 1*2*3*4 1*2*3*4*5
列出10的阶层过程
1 1*2 1*2*3 1*2*3*4 1*2*3*4*5 1*2*3*4*5*6 1*2*3*4*5*6*7 1*2*3*4*5*6*7*8 1*2*3*4*5*6*7*8*9 1*2*3*4*5*6*7*8*9*10
其中输入5 有1个尾随0
输入10 有2个尾随0
看上面的图就会发现一个规律。能组成n!的尾零的元素一定是2和5相乘,因子为2个数一定大于因子为5的个数,所以只需要统计因子为5的倍数的个数即可。
代码
class Solution {
public int trailingZeroes(int n) {
int num=0;
while(n>0){
num+= n/5;
n/=5;
}
return num;
}
}