階乘是基斯頓·卡曼(Christian Kramp,1760~1826)於 1808 年發明的運算符號。
一個正整數的階乘(factorial)是所有小於及等於該數的正整數的積,規定0的階乘為1。自然數n的階乘寫作n!。
即n!=1×2×3×...×(n-1)×n。階乘亦可以遞歸方式定義:0!=1,n!=(n-1)!×n。
給你一個非負整數n,要你計算階乘n!的結果末尾有幾個 0。比如說輸入n = 5,因為5! = 120,末尾有一個 0。
我們先來分析一下末尾的 0 從哪裡來的?
首先,兩個數相乘結果末尾有 0,一定是因為兩個數中有因子2 和 5,因為 10 = 2x 5。
這樣,問題就轉化成:n!可以分解出多少個因子2 和 5?
比如說n = 25,那麼25!最多可以分解出幾個 2 和 5 相乘?這個要看分解出幾個因子5,因為每個偶數都能分解出因子 2,因子 2 肯定比因子 5 多,2足夠用。
現在,問題轉化為:n!最多能分解出多少個因子5?
下面直接給出計算機算法,你也可以完全用筆算。
int how_many_zeros(int n)
{
int d= 5;
int ans = 0;
while (d < n) {
ans += n / d;
d *= 5;
}
return ans;
}
不難吧,大家分析一下時間複雜度吧。