范围问题
查看原帖
范围问题
340728
2020许弘毅楼主2024/3/24 21:08

请问为什么这样不行,只有90pts

#include<cmath>
#include<cstdio>
int p,w;
long long a[510],b[510];
void cheng(long long *a,long long *b)//高精乘 
{
	long long c[10010]={0},len=a[0]+b[0];
	if(len>500)
		len=500;
	for(int i=1;i<=a[0];i++)
	{
		for(int j=1;j<=b[0];j++)
		{
			int t=i+j-1;
			c[t]+=a[i]*b[j];
			c[t+1]+=c[t]/10;
			c[t]%=10;
		}
	}
	while(!c[len])
		len--;
	for(int i=1;i<=len;i++)
		a[i]=c[i];
	a[0]=len;
}
int main()
{
	scanf("%d",&p);
	w=ceil(p*log10(2));
	printf("%d\n",w);
	a[0]=b[0]=1; 
	a[1]=1,b[1]=2;
	while(p)//快速幂 
	{
		if(p%2)
			cheng(a,b);
		p>>=1;
		cheng(b,b);
	}
	int d=500;
	a[1]--;
	for(int i=1;i<=10;i++)
	{
		for(int j=1;j<=50;j++)
			printf("%d",a[d--]);
		printf("\n");
	}
	return 0;
}

而改成这样就行了?

#include<cmath>
#include<cstdio>
int p,w;
long long a[510],b[510];
void cheng(long long *a,long long *b)//高精乘 
{
	long long c[10010]={0};
	for(int i=1;i<=500;i++)
	{
		for(int j=1;j<=500;j++)
		{
			int t=i+j-1;
			c[t]+=a[i]*b[j];
			c[t+1]+=c[t]/10;
			c[t]%=10;
		}
	}
	for(int i=1;i<=500;i++)
		a[i]=c[i];
}
int main()
{
	scanf("%d",&p);
	w=ceil(p*log10(2));
	printf("%d\n",w);
	a[0]=b[0]=1; 
	a[1]=1,b[1]=2;
	while(p)//快速幂 
	{
		if(p%2)
			cheng(a,b);
		p>>=1;
		cheng(b,b);
	}
	int d=500;
	a[1]--;
	for(int i=1;i<=10;i++)
	{
		for(int j=1;j<=50;j++)
			printf("%d",a[d--]);
		printf("\n");
	}
	return 0;
}

就只是修改了高精度乘法函数中的边界条件而已。愿有大佬赐教。

2024/3/24 21:08
加载中...