求n階乘中尾部零的個數(JAVA)
阿新 • • 發佈:2019-01-08
描述
設計一個演算法,計算出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; } }