階乘後面0的數量

2021-09-25 19:37:36 字數 1080 閱讀 2074

n的階乘後面有多少個0?

6的階乘 = 1*2*3*4*5*6 = 720,720後面有1個0。

收起

乙個數n(1 <= n <= 10^9)
輸出0的數量
5
1
有思路了,這個題並不難。寫它是因為網上很多題解,沒有把思想真正表達清楚,所以想寫乙份題解,談談我的看法。

此類問題很顯然屬於數學問題,一定要找到其中的本質規律才能得到正確的數學模型。

兩個大數字相乘,都可以拆分成多個質數相乘,而質數相乘結果尾數為0的,只可能是2*5。如果想到了這一點,那麼就可以進一步想到:兩個數相乘尾數0的個數其實就是依賴於2和5因子的個數。又因為每兩個連續數字就會有乙個因子2,個數非常充足,所以此時只需要關心5因子的個數就行了。

那麼如何找到n!中5因子的個數呢?

來看栗子:

10!=10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1            可以看到10!中5的因子為10和5,有兩個

15!=15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1             15!中5的因子是15、10和5,有三個

由此可見,n除以5便可得到5的因子sum。

但是,當5的因子不止含有乙個5呢?例如25、125、625。

當5的因子含有2個5相乘時,25 = 5 * 5,我們需要將sum加上n除以5再除以5的個數,這時sum就包含將25分成兩個5的因子之後的總個數。

當5的因子含有3個5相乘時,125 = 5 * 5 * 5,我們需要將sum加上n除以5再除以5再除以5的個數,這時sum就包含將125分成3個5的因子之後的總個數。

......(這個過程可以憑藉while迴圈實現)。

#include using namespace std;

int main()

cout << sum << endl;

return 0;

}

文章參考了此部落格:

1003 階乘後面0的數量

1003 階乘後面0的數量 基準時間限制 1 秒 空間限制 131072 kb 分值 5 難度 1級演算法題 n的階乘後面有多少個0?6的階乘 1 2 3 4 5 6 720,720後面有1個0。input 乙個數n 1 n 10 9 output 輸出0的數量input示例 5output示例 1...

1003 階乘後面0的數量

基準時間限制 1 秒 空間限制 131072 kb 分值 5 難度 1級演算法題 n的階乘後面有多少個0?6的階乘 1 2 3 4 5 6 720,720後面有1個0。input 乙個數n 1 n 10 9 output 輸出0的數量input示例 5output示例 1 乙個數 n 的階乘末尾有多...

51 nod 1003 階乘後面0的數量

1003 階乘後面0的數量 基準時間限制 1 秒 空間限制 65536 kb 分值 5n的階乘後面有多少個0?6的階乘 1 2 3 4 5 6 720,720後面有1個0。input 乙個數n 1 n 10 9 output 輸出0的數量input 示例 5output 示例 1程式設計之美有講 乙...