這個題目是求N!后面有多少個0,注意N可能最大到10的9次。哈哈,直接枚舉1-N有多少個2和5的因子,然后取小的值肯定會超時的。
但是,我還是試了下,果斷超時了。
那就只有想數(shù)學(xué)結(jié)論了,果斷想到1-N中能被2整除的數(shù)字有N / 2。哈哈,再往后思考下,發(fā)現(xiàn)1-N中能被4整除的數(shù)字有N / 4個,再往后
就是N / 8,一直到N 除以2的某個次方為0為止,那么把所有的值加起來就是2的因子的個數(shù)了。求5的因子的個數(shù)也是這樣的方法了。
很明顯,5的因子的個數(shù)一定會小于等于2的因子的個數(shù)。那么直接求5的因子的個數(shù)就行了。由于,N / 5的時候用到了向下取整,
所以不能用等比數(shù)列求和公式,怎么把答案弄成一個公式,還不知道了。
PS:其實我這種思路的靈感來自于篩選素數(shù)的方法了。
代碼如下:
#include <stdio.h>
#include <algorithm>
#include <math.h>
using namespace std;
int GetAns(
int nN)
{
int nAns = 0;
while (nN)
{
nAns += nN / 5;
nN /= 5;
}
return nAns;
}
int main()
{
int nT;
scanf("%d", &nT);
while (nT--)
{
int nN;
scanf("%d", &nN);
printf("%d\n", GetAns(nN));
}
return 0;
}