问一下我用了Bigint,但是超时4个点(这上面已经有两个我问的问题了…… )
查看原帖
问一下我用了Bigint,但是超时4个点(这上面已经有两个我问的问题了…… )
494699
卷王慢即快楼主2022/7/26 15:01

我不想用快速幂,于是用了Bigint,结果T了4个点,不知道咋搞。。。

#include<bits/stdc++.h> //60分代码
using namespace std;
struct Bigint
{
	int f[1000],len;
	Bigint(int x=0)
	{
		memset(f,0,sizeof(f));
		for(len=1;x;len++)
			f[len]=x%10,x/=10;
		len--;
	}
	void flatten(int L)
	{
		len=L;
		for(int i=1;i<=500;i++)
		{
			f[i+1]+=f[i]/10;
			f[i]%=10;
		}
		for(;!f[len];) len--;
		len=min(len,500);
	}
	void print()
	{
		for(int i=max(len,1);i>=1;i--) cout<<f[i];
	}
};
Bigint operator*(Bigint a,int b)
{
	Bigint c;
	int mlen=a.len;
	for(int i=1;i<=500;i++)
		c.f[i]=a.f[i]*b;
	c.flatten(mlen+11);
	return c;
}
int p; Bigint ans(1);
int main() {
	cin>>p;
	cout<<int(log10(2)*p+1)<<endl;
	for(int i=1;i<=p;i++) ans=ans*2;
	ans.f[1]--;
	ans.len=500;
	for(int i=500;i>=1;i--) {
		cout<<ans.f[i];
		if(i!=500&&i%50==1) cout<<endl;
	}
	return 0;
}
2022/7/26 15:01
加载中...