求n阶乘中尾部零的个数(JAVA)

描述

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

样例

11! = 39916800,因此应该返回 2

挑战

O(logN)的时间复杂度

所有可能造成尾部0的只有10的倍数,5的倍数,也就是求阶乘中拥有的5的个数。

例如 11 = 1,2,3,4,5,6,7,8,9,10,11。

因数中能分解出两个5,所以有两个0.

26 = 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26。

5,10,15,20能分解出4个5,25能分解出2个五,所以结果为6.

public class Main {
    public static void main(String[] args) {
        System.out.println(getZero(105));
    }

    public static long getZero(long n) {
        long result = 0;
        long k = 5;
        while (k < n) {
            result += n / k;
            k *= 5;
        }
        return result;
    }
}

猜你喜欢

转载自blog.csdn.net/m0_37961948/article/details/81061577
今日推荐