1.题目
给定一个整数 n,返回 n! 结果尾数中零的数量。
示例:
输入: 3输出: 0解释: 3! = 6, 尾数中没有零。输入: 5输出: 1解释: 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;
}
