这一题纠结了好久,主要是因为担心double在保存log10会有误差导致数比较大时出现错误,不过现在知道10000000还不属于比较大的时候。这道题的思路是用log10将阶乘转化为加法,加完之后用整数位加1既是位数,代码如下:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double sum;
int t,n;
cin>>t;
while(t--){
sum=0;cin>>n;
for(int i=1;i<=n;i++) sum+=log10((double)i);
cout<<(int)(sum)+1<<endl;
}
return 0;
}