尾部的零
题目
设计一个算法,计算出n阶乘中尾部零的个数
样例
11! = 39916800,因此应该返回 2
挑战
O(logN)的时间复杂度
题解
先把n除以5获取可以被5整除个数,然后再次除以5获取可以再次被5整除的个数,如此迭代处理直至没有可以被5整除的数。
如11/5 = 2,再将2/5=0,2+0=2即时答案。
class Solution {
/*
* param n: As desciption
* return: An integer, denote the number of trailing zeros in n!
*/
public long trailingZeros(long n) {
long sum = 0;
while (n != 0)
{
sum += n / 5;
n /= 5;
}
return sum;
}
};
Last Update 2016.8.12