1.题目

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

示例:

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

2.思路

首先我们要知道阶乘是什么:一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。

比如上面的例子:

3!= 1×2×3 = 6

5!= 1×2×3×4×5 = 120

最简单的我们可以做这个数的阶乘,然后用10来除看是否可以整除,整除几次就有几个0。当然这种方法我们不会考虑的,低效、而且在java中很容易溢出(当然可以用BigInteger来防止溢出)

那么这里的最佳思路是:一个数除以5得到的结果,就是可以分成多少个以5为长度的段,就是一部分答案。然而还有数字可以除以25,125,那这样就需要对这个数除以五之后的结果一直除以5,直到商为0

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