80分求调
查看原帖
80分求调
1043658
Purple_meteor楼主2023/11/18 11:21

不知为啥WA了2个点

好像是第一行位数出问题了

#include<bits/stdc++.h>
using namespace std;
int n;
string ans="3",yy;
string mul(string x,string y)
{
	string z;
	int lx=x.size(),ly=y.size(),lz=ly+lx,xx[10000],yy[10000],zz[10000]={0};
	for(int i=1;i<=lx;i++)
	xx[i]=(int)(x[lx-i]-'0');
	for(int i=1;i<=ly;i++)
	yy[i]=(int)(y[ly-i]-'0');
	for(int i=1;i<=lx;i++)
	for(int j=1;j<=ly;j++)
	zz[i+j-1]+=xx[i]*yy[j];
	int o=0;
	for(int i=1;i<=lz;i++)
	{
		zz[i]+=o;
		o=zz[i]/10;
		zz[i]%=10;
	}
	bool flag=0;
	for(int i=lz;i>=1;i--)
	{
		if(zz[i]) flag=1;
		if(flag||i==1) z+=zz[i]+'0';
	}
	return z;
}
int main()
{
	cin>>n;
	int k=n/3,y=n%3;
	if(y==1)
	{
		k--;
		y=4;
	}
	yy=yy+char(y+'0');
	for(int i=2;i<=k;i++)
	ans=mul(ans,"3");
	ans=mul(ans,yy);
	long long l=ans.length();
	cout<<l<<endl;
	int ll=ans.length();
	if(l>100) ll=100;
	for(int i=0;i<ll;i++)
	cout<<ans[i];
	return 0;
}
2023/11/18 11:21
加载中...