问题描述:设计一个算法,计算出n阶乘中尾部零的个数
问题说明:时间复杂度为O(logN)
问题分析:我们已知,0在乘法中由2 X 5得到,而在一组连续数中,2的数量肯定远远大于5的数量,所以,计算阶乘中尾部零的个数,即转换为计算在1~n中5的个数。
好了,这么一说相信很多人都能马上想到用一个while循环,不断让n/5,直到n为0,然后把每次循环的商相加就是我们要求的值。但!是!JS不同于C++的地方在于在JS中使用 “/” 并不像C++中只返回整数部分,也就是说,在C++中 5 / 2=2,而JS中 5 / 2=2.5,JS会保留计算结果的小数部分。所以,想要得到正确结果,还要给每个计算结果加上parseInt()来取整。
代码实现:
const trailingZeros = function (n) {
let zero = 0;
while(n!=0){
zero += parseInt(n/5);
n = parseInt(n/5);
}
return zero;
}