Leetcode.172.Factorial Trailing Zeroes

题目

求出n的阶乘末尾有多少个0.

Input: 3
Output: 0

Input: 30
Output: 7

思路

如果强行求解n的阶乘, 时间复杂度太高.
求解多少个0, 就需要对10进行因式分解, 分解为质数.
n的阶乘里面2肯定比5多, 只要有5就移动能构成10.

因此主要需要求5的个数.
如果一个数除以5的余数就有多少个5, 除以25的余数就有多少个25...

int trailingZeroes(int n) {
    int res = 0;
    long num = 5;
    vector dp;
    while (num <= n) {
        int left = n / num;
        num *= 5;
        res += left;
    }

    return res;
}

总结

转换思维, 转换问题求解对象.

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