一個模版:
算n的階乘末尾0的個數,但是數字較大的時候則比較麻煩,可以通過如下原理反覆的除以5得到最後的結果: 原理是: 假如你把1×2×3×4×……×N中每一個因數分解質因數,結果就像: 1 × 2 × 3 × (2 × 2) × 5 × (2 × 3) × 7 × (2 × 2 ×2) ×…… 10進位制數結尾的每一個0都表示有一個因數10存在——任何進位制都一樣,對於一個M進位制的數,讓結尾多一個0就等價於乘以M。 10可以分解為2 × 5——因此只有質數2和5相乘能產生0,別的任何兩個質數相乘都不能產生0,而且2,5相乘只產生一個0。 所以,分解後的整個因數式中有多少對(2, 5),結果中就有多少個0,而分解的結果中,2的個數顯然是多於5的,因此,有多少個5,就有多 少個(2, 5)對。 所以,討論1000的階乘結尾有幾個0的問題,就被轉換成了1到1000所有這些數的質因數分解式有多少個5的問題。 5的個數可以用下面那個式子算出
ac code:
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int T,n; 6 cin>>T; 7 while(T--) 8 { 9 cin>>n; 10 int sum=0; 11 for(int i=5;i<=n;i=i*5) 12 { 13 sum+=n/i; 14 } 15 cout<<sum<<endl; 16 } 17 return 0; 18 }