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程式設計之美有講 乙...