Leetcode 172. 阶乘后的零 C++

Leetcode 172. 阶乘后的零

题目

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

测试样例

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

题解

我们考虑一下为什么会出现0,所有的一个0其实都可以归结为25。而且阶乘过程中,2的数量是远大于5的数量的,因此有多少个0其实就转化成了有多少个5。我们再考虑一个5的出现,对于1~n,这些数中,每隔5个数会出来一个5,每隔25个数会再出来一个5(因为55=25,这里会多一个5),每个125个数会再出来一个5(因为555=125,这里又多了一个5)······因此我们就只需要根据这样的规律对5的数量进行统计,详细过程见代码

代码

int trailingZeroes(int n) {
        int ans=0;
        long x=5;
        while(n/x){		//n没有x个数了
            ans += n/x;
            x *= 5;
        }
        return ans;
    }

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/factorial-trailing-zeroes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


版权声明:本文为weixin_43750513原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。