LintCode :尾部的零
题目
设计一个算法,计算出n阶乘中尾部零的个数
样例
11! = 39916800,因此应该返回 2
思路
要判断有多少个零,则判断因子中有多少个10,要判断有多少个10,则判断因子中有多少个2和5。2的倍数是2,4,6,8等,5的倍数是5,10等,在阶乘中显然分解出的5要比2多。那么这道题就转为判断阶乘中有多少个5。
假设n = 25。那么0的个数应该是25/5 + 25/25。因为25是5的幂次,所以也要计算。
代码
long long trailingZeros(long long n) {
long long result = 0;
long long fiveTimes = 5;
while(n >= fiveTimes) {
result += n / fiveTimes;
fiveTimes *= 5;
}
return result;
}