以下是算法的直觀解釋。
假設求60!的結果後面有幾個0。
由《編程之美》可知其實是求1,2,3……60中共有幾個5的因子,如,5有一個,10有兩個,……一起加起來即得到結果。但是如果一個一個這樣計算下去,會超時的。
其實還有更簡單的計算方法。
我們知道,在1->60的數中,以下的數可以被5整除:
5,10,15,20,25,30,35,40,45,50,55,60
共60/5 = 12(個)。
其中,
25,50可以被25整除,即25和50可以貢獻兩個5的因子。
即其中可以貢獻2個5的因子的個數爲60/25 = 2(個)。
貢獻3個5的因子的沒有了,因爲60/125 = 0。
所以共有12 + 2 = 14 (個)5的因子。(即1 * 10 + 2 * 2)
#include <iostream>
using namespace std;
int main()
{
int T;
cin >> T;
__int64 N;
for(int i = 0; i < T; i++)
{
cin >> N;
int ret = 0;
while(N) {
ret = ret + N / 5;
N = N / 5;
}
cout << ret << endl;
}
return 0;
}