設計一個算法,計算出n階乘中尾部零的個數算法
$11! = 39916800$,所以應該返回 2設計
思路:
這是一個數學問題,十進制尾數獲得0的只有$2*5$,將階乘的每一個因素分解質因數,明顯獲得2的數量多於5的數量,因此,這個問題就變成了有多少個5的問題。
能夠是5,25,125...爲何這樣?好比$26!$:25其實能夠分解成2個5相乘,而$26/5$只計算了一個5,所以還要再加$26/25$$.code
class Solution { public: /* * @param n: A long integer * @return: An integer, denote the number of trailing zeros in n! */ long long trailingZeros(long long n) { // write your code here, try to do it without arithmetic operators. /*這是一個數學問題,十進制尾數獲得0的只有2*5,將階乘的每一個因素分解質因數,明顯獲得2的數量多於5的數量,因此,這個問題就變成了有多少個5的問題。能夠是5,25,125...爲何這樣?好比26!:25其實能夠分解成2個5相乘,而26/5只計算了一個5,所以還要再加26/25.*/ long long sum = 0; long long t=5; while(t<=n){ sum += n/t; t = 5*t; } return sum; } };