Factorial Trailing Zeroes

Given an integer n, return the number of trailing zeroes in n!.

Note: Your solution should be in logarithmic time complexity.

题意: 求n!后面有多少个0, 尾部

这里就不考虑负数和0了, 这种情况直接认为0

方法1:

0只可能是10, 4x5, 2x5,6x5,..., 而实际就是2*5得到一个0, 这样就只是求解质因数了, 得到两者2和5质因数和, 两者最小值就是

方法2:

很明显, 5的个数比2少, 可以先模拟一小段.

方法3:

求5质因数个数, 从1到n, 这样得到的time complexity 是 O(n), 不符合要求

方法4:

推断一下, 每5个数的时候,就多一个能整除5的, 但是, 当出现25, 625, 就多了不止一个

这样就要兼顾一下了 具体这样

class Solution {
public:
    int trailingZeroes(int n)
    {
        int result = 0;
        while(n)
        {
            result += n/5;
            n /= 5;
        }
        return result;
    }
};


你可能感兴趣的:(Factorial Trailing Zeroes)