阶乘后的零

原题

阶乘后的零

题解

这道题其实考察的是数学, 后面有多少个0,也就是多少个10,而我们知道10的公因数为2,5.所以我们只需要计算阶乘中的数2和5的因子就足够了。取他们的最小值

class Solution {
public:
    int contain(int n,int fac){
        int num = 0;
        while(true){
            if(n<fac) break;
            if(n%fac != 0) break;
            n /= fac;
            num++;
        }
        return num;
    }

    int trailingZeroes(int n) {
        int a = 0; //2的数量
        int b = 0; //5的数量
        for(int i = n;i>=5;i--){
            a += contain(i,2);
            b += contain(i,5);
        }
        return min(a+3,b);     
    }
};

但是我们知道小的因数个数必然更多,所以我们没必要把2考虑进去,考虑5即可

class Solution {
public:
    int trailingZeroes(int n) {
        int num = 0; //5的数量
        for(int i = 5;i<=n;i+=5){
            for(int j = i;j%5 == 0;j/=5){
                num++;
            } 
        }
        return num;     
    }
};

你可能感兴趣的:(leetcode每日一练,算法)