筆試題 N 尾部連續0的個數

2021-09-07 00:13:47 字數 618 閱讀 8245

對任意輸入的正整數n,編寫c程式求n!的尾部連續0的個數,並指出計算複雜度。如:18!=6402373705728000,尾部連續0的個數是3。 

(不用考慮數值超出計算機整數界限的問題) 

1、直接計算n!的值,然後統計尾部0的個數,時間複雜度o(n);

2、發散思維,想想尾部為0的數是怎麼得到的?

很容易想到2*5即可得到0,則n!可以表示為k*(2^m)*(5^n),由於在n!中m>>n,因此n!=k'*(2*5)^n,即n為尾部為0的個數。

由此,我們只要考慮n!中包含多少個5的倍數就可以了,如25,含有5,10,15,20,25,包含6個5的倍數,即25!尾部有6個0。

n=n/5+n/(5^2)+n/(5^3)....+n/(5^k) (k<=n/5)

時間複雜度:o(log5n)

#include using namespace std;

long long numofzero(long long n)

return count;

}long long factorial(long long n)

return fac;

*/}int main()

N階乘尾部的0個數

描述 設計乙個演算法,計算出n階乘中尾部零的個數 思路 1 1 2 3 n 1 2 3 2 2 5 2 3 7 2 2 2 3 3 2 5 化成質數相乘,只有2 5才可能得到結果有尾數中有0 2 因為2的個數是比5多的,求0的個數問題就轉化成了求5的個數的問題 3 5 5 5 5 5 5有n個5 得...

階乘尾部0的個數

輸入 輸入資料有若干行,每行上有乙個非負整數n,對應一種情形。輸出 對於每一種情形,直接輸出結果 換行。樣例輸入816 30樣例輸出13 7方法一 令f x 表示正整數x末尾所含有的 0 的個數,則有 當0 n 5時,f n 0 當n 5時,f n k f k 其中 k n 5。include in...

求1000的階乘尾部0的個數

要求1000的階乘尾部0的個數,如果想先求出1000的階乘,肯定超過了基本資料型別的取值範圍,此時就需要通過其他途徑來解決問題。biginteger可以接收很大的整數,所以完全可以接收1000的階乘的結果。public static void main string args string str ...