问你一个数的阶乘是几位数。
首先,N的位数等于logN+1向下取整。
那么N!的位数就等于log(N!)+1向下取整,即log1+log2+……+logN+1向下取整
打表可以AC。
与阶乘有关的还有一个斯特林公式,有空研究下。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define MAXN 10000000
using namespace std;
int res[MAXN+1];
void solve()
{
double ans=0;
for(int i=1; i<=MAXN; ++i)
{
double tmp=(log10(i*1.0));
ans+=tmp;
res[i]=(int)ans+1;
}
}
int main()
{
solve();
int T;
scanf("%d",&T);
while(T--)
{
int t;
scanf("%d",&t);
printf("%d\n",res[t]);
}
return 0;
}