【JS】阶乘后的零 #数学 1乘到100/1000/10000 的积 末尾有几个零?

1乘到100的积末尾有几个零

给定一个整数 n,返回 n! 结果尾数中零的数量。

输入: 3 , 输出: 0 , 解释: 3! = 6, 尾数中没有零。
输入: 5 , 输出: 1 , 解释: 5! = 120, 尾数中有 1 个零.

说明: 你算法的时间复杂度应为 O(log n) 。


解法一:

阶乘,一个正整数的阶乘是所有小于及等于该数的正整数的积。示例:6! = 6 * 5 * 4 * 3 * 2 * 1 , 等于 720

公式 Z=[N/5] + [N/5^2] …

n = 300 求阶乘后的0 , 300/5 + 300/25 + 300/125 = 60 + 12 + 2

总共有5的质因数 74 个

var trailingZeroes = function(n) {

    var div=5 ,sum=0
    while(div<=n){
        sum += Math.floor(n/div) 
        div*=5
    }
    return sum;    
};

解法二:

n = 1000 求阶乘后的 0 ,1000/5=200 , 200/5=40, 40/5=8, 8/5=1, 3/5=0,

一共200+40+8+1+0 等于249个

var trailingZeroes = function(n) {

    var count=0;

    while(n= Math.floor(n/5)) {
        
        count+=n;
    }

    return count;
};

猜你喜欢

转载自blog.csdn.net/sphinx1122/article/details/84559345