
高精度计算肯定会超时,高精代码如下:
我还做了去除后导零进行优化但是仍会超时。
#include<cstdio>
#include<iostream>
#include<vector>
using namespace std;
int cnt=0;
vector<int> mtl(vector<int> A,int d)
{
vector<int> C; int t=0;
for(int i=0;i<A.size()||t;i++)
{
if(i<A.size()) t+=A[i]*d;
C.push_back(t%10);
t/=10;
}
while(C.size()>1&&C.back()==0) C.pop_back();
bool flag=false;
vector<int>B;
for(int i=0;i<C.size();i++)
{
if(C[i]==0&&!flag) cnt++;
else
{
B.push_back(C[i]);
flag=true;
}
}
return B;
}
int main(void)
{
int t; cin>>t;
while(t--)
{
int n; cin>>n;
cnt=0;
vector<int> C; C.push_back(1);
for(int i=2;i<=n;i++)
{
C=mtl(C,i);
}
cout<<C.size()+cnt<<endl;
}
return 0;
}
用数论,套公式计算。
#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
int main(void)
{
int t; cin>>t;
while(t--)
{
int n; cin>>n;
double cnt=1;
for(int i=1;i<=n;i++)
{
cnt+=log10(i);
}
cout<<(int)cnt<<endl;
}
}
这篇博客探讨了在处理高精度计算时可能会遇到的超时问题,并提供了两种不同的解决方案。第一种是通过优化代码,去除尾部的零来减少计算复杂度,但仍然存在超时风险。第二种方法利用数论,通过计算每个数字的位数之和来估算结果长度,避免了高精度计算。这两个方法在解决实际编程挑战中具有一定的实用价值。
404

被折叠的 条评论
为什么被折叠?



