求助,调了好几个小时了,为什么50分?
查看原帖
求助,调了好几个小时了,为什么50分?
308729
sheeplittlecloud楼主2021/2/1 09:41

rtrt

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int k,n;
char a1[50001],b1[50001];
int a[50001],b[50001],len,c[50001];
void cd()
{
	int i,j;
	memset(a,0,sizeof(a));
	memset(b,0,sizeof(b));
	memset(c,0,sizeof(c));
    a[0]=strlen(a1);
	b[0]=strlen(b1);
    for (i=1;i<=a[0];++i)
		a[i]=a1[a[0]-i]-'0';
    for (i=1;i<=b[0];++i)
		b[i]=b1[b[0]-i]-'0';
    for (i=1;i<=a[0];++i)
		for (j=1;j<=b[0];++j)
			c[i+j-1]+=a[i]*b[j];
    len=a[0]+b[0];                                     
    for (i=1;i<len;++i) 
		if(c[i]>9)
		{
			c[i+1]+=c[i]/10;
			c[i]%=10;
		}
    while (c[len]==0&&len>1) 
		len--;
    return ;
} 
int main()
{
	ll i,j,flag,ans=0;
	cin>>n;
	if(n%3==0)
	{
		k=n/3;
		flag=0;
	}
	if(n%3==1)
	{
		k=(n-4)/3+1;
		flag=4;
	}
	if(n%3==2)
	{
		k=(n-2)/3+1;
		flag=2;
	}
	if(flag>0)
	{
		a1[0]='1';
		b1[0]='3';
		for(i=1;i<=k-1;i++)
		{
			cd();
			ll z=0;
			for(j=len;j>=1;j--)
			{
				a1[z]=c[j]+'0';
				z++;
			}
		}
		b1[0]=flag+'0';
		cd();
		cout<<len<<endl;
  		if(len>=100)
		{
			for(i=100;i>=1;i--)
				cout<<c[i];
			return 0;
		}
  		for(i=len;i>=1;i--) 
			cout<<c[i];
	}
	else
	{
		a1[0]='1';
		for(i=1;i<=k;i++)
		{
			b1[0]='3';
			cd();
			ll z=0;
			for(j=len;j>=1;j--)
			{
				a1[z]=c[j]+'0';
				z++;
			}
		}
		cout<<len<<endl;
		if(len>=100)
		{
			for(i=100;i>=1;i--)
				cout<<c[i];
			return 0;
		}
  		for(i=len;i>=1;i--) 
			cout<<c[i];
	}
	return 0;
}
2021/2/1 09:41
加载中...