计算阶乘 N! 末尾0的数量

链接:Number of trailing zeros of N! | Codewars

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//关键在于计算5的个数
function zeros(n) {
let count=0;
let temp=parseInt(n/5);
while(temp!==0){
count+=temp;
temp=parseInt(temp/5);
}
return count;
}
console.log(zeros(25));
// 6
console.log(zeros(101));
// 24

分析:

两个正整数相乘,乘积的尾部含有0的情况如下:

1
2
3
4
1个0:2*5=10,可以写成2^1*5^1=10^1
2个0:4*25=100,可以写成2^2*5^2=10^2
3个0:8*125=1000,可以写成2^3*5^3=10^3
...

计算尾部0的数量,等价于计算两个乘数中含有的质因数25的数量。

回到阶乘N!的计算上,计算尾部0的数量:

1
2
5! = 5*4*3*2*1 = 120,尾部有1个0,因为只有1个质因数5和3个质因数2;
25! = 15511210043330985984000000,尾部有6个0,因为含有6个质因数5;
Contents
|