设计一个算法,计算出n阶乘中尾部零的个数
样例 1:
输入: 11
输出: 2
样例解释:
11! = 39916800, 结尾的0有2个。
样例 2:
输入: 5
输出: 1
样例解释:
5! = 120, 结尾的0有1个。
这道题最简单的方法就是 直接求出n!然后数末尾有几个0 但是这样效率很慢 所以得想一种简单的方法
我们发现5 * 2 =10 10 * 4=40 只要是5的倍数就能在尾部出来一个0 所以尾部0的个数 就是0到n中 有
几个5或5的倍数的数 阶乘尾部0的个数就有几个
代码如下
非递归代码
public long trailingZeros(long n) {
long haveZero = 0;
while(n!=0){
haveZero = haveZero+n/5;
n = n/5;
}
return haveZero;
}
递归代码
public long haveZero = 0;
public long trailingZeros(long n) {
if(n!=0){
haveZero = haveZero + n/5;
return trailingZeros(n/5);
}else{
return haveZero;
}
}