阶乘后的零

题目

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

示例

示例 1:

输入: 3
输出: 0
解释: 3! = 6, 尾数中没有零。

示例 2:

输入: 5
输出: 1
解释: 5! = 120, 尾数中有 1 个零.

说明: 你算法的时间复杂度应为 O(log n) 。

解题

思路

这道题时间复杂度要求是O(log n),因此你先求出来阶乘再看尾部有几个0的方案就宣告破产了,就算不要求时间复杂度,如果阶乘特别大,很容易就爆了。

首先,我们要明白尾数里面有0是怎么来的,末尾有0肯定是乘以10了,而10是2*5来的,而2的数量是一定大于5放入数量,如果这个为题就是,在阶乘的过程中一共出现了多少个5相乘。

首先我们使用n/5,这样就可以获取n后面有多少个5或者5的倍数的相乘因子。但是有些数比如25是2个5相乘,125是3个5相乘,所以我们要把i除以5。再看看有多少个5或者5或者5的倍数的相乘因子。直到n小于5为止。

代码

class Solution {
    public int trailingZeroes(int i) {
         int count = 0;
        while (i >= 5) {
            count += i / 5;
            i /= 5;
        }
        return count;
    }
}