LintCode 2. 尾部的零

问题:设计一个算法,计算出n阶乘中尾部零的个数

样例 1:
输入: 11
输出: 2
样例解释:
11! = 39916800, 结尾的0有2个。

挑战:O(logN)的时间复杂度


解题思路:

可以将每个数拆分成其素因子的乘积,可以发现,0是由2*5产生的,而5的数量一定小于2的数量,因此5的个数决定了结尾0的个数。

只要计算n的阶乘中,5这个素因子出现多少次即可。


Solution:

public long trailingZeros(long n) {
	// write your code here, try to do it without arithmetic operators.
	long result = 0;
    while(n != 0){
		result += n / 5;
        n /= 5;
     }
	 return result;
}

猜你喜欢

转载自blog.csdn.net/weixin_43405220/article/details/101051476