leetcode172. 阶乘后的零 | 求n!中因子p的个数

题目描述

思路

1.有多少个零,考虑什么情况产生0;25的时候产生一个0,所以我们只要去统计2的个数和5的个数,取二者最小就可以了
2.进一步考虑到,2的个数一定比5的个数多,所以我们只要去统计5的个数就可以了
3.如何去统计阶乘中5的个数呢?考虑什么时候阶乘中有5,发现5
1015202530...这些情况会产生5,看下面的分析

代码

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

变形题:求n的阶乘中因子p的个数

    int trailingZeroes(int n,int p) {
        int cnt = 0;
        while(n){
            cnt += n/p;
            n /= p;
        }
        return cnt;
    }
原文地址:https://www.cnblogs.com/fisherss/p/12611773.html