第一反应是高精度运算
附上wa代码
#include<iostream>
#include<vector>
using namespace std;
vector<int> mul(int number,vector<int> a)
{
int carry = 0;
vector<int>c;
for(int i=0;i<a.size();i++)
{
carry += a[i]*number;
c.push_back(carry%10);
carry /= 10;
}
while(carry)
{
c.push_back(carry%10);
carry /= 10;
}
return c;
}
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
vector<int>a(1,1);
for(int i=2;i<=n;i++)
{
a = mul(i,a);
}
cout<<a.size()<<endl;
}
}
然后正好超时了
后来看大佬才知道直接求log10+1就是一个数字的位数
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
double sum = 1;
for(int i=1;i<=n;i++)
{
sum += log10(i);
}
cout<<int(sum)<<endl;
}
}