主要是一个公式:求n!的位数,令n!=10^M;l两边取10的对数,得到,M=(lg(1)+lg(2)+lg(3)+....lg(n)),对M向上取整即可。
#include<cstdio>
#include<cmath>
#include<iostream>
using namespace std;
int main()
{
int T,n;
double sum;
cin>>T;
while(T--)
{
sum=1;
cin>>n;
for(int i=1;i<=n;i++)
sum+=log10((double)i);//PE两次,因为log()括号里面必须是浮点型的
printf("%d\n",(int)sum);
}
system("pause");
return 0;
}