设计一个算法,计算出n阶乘中尾部零的个数
输入: 11
输出: 2
样例解释:
11! = 39916800, 结尾的0有2个
解题思路:
看到这道题,想到只要有5就能使得结尾多一个0,由于是连续的,偶数完全够满足与和5及其倍数相乘的,所以只需要看n之前有多少个5就可以了。
5x5=10 有一个0
25x4=100有两个0
125x8=1000有三个0
…
n/5可以得到1到n内有多少个数是5的倍数。这种数和多个2相乘末尾会得到1个0;
n/5/5可以得到1到n内有多少个数是25的倍数。这种数和多个2相乘末尾会得到2个0;
n/5/5可以得到1到n内有多少个数是125的倍数。这种数和多个2相乘末尾会得到3个0;
…
可推理得到:n/5/5/5/…5 (k个5)可以得到1到n内有多少个数是5^k的倍数.
比如n=125,125个数里有125/5=25个数是5的倍数,又有125/5/5=5个数是25的倍数,由125/5/5/5=1个数是125的倍数。
综上:125! 的末尾0的个数就是125/5 + 125/5/5 + 125/5/5/5。
public long trailingZeros(long n) {
// write your code here
long count=0;
while(n/5>0){
count+=n/5;
n=n/5;
}
return count;
}