1. 程式人生 > >求n階乘中尾部零的個數(JAVA)

求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;
    }
}