站外题求助
查看原帖
站外题求助
1320188
wangmingruiakioi楼主2024/7/17 12:07

#题目内容 给定aa和bb,求(a+b)(a−b)(a+b)(a-b)

a,b≤10500a,b\le10^{500}

这里我用了平方差公式(a+b)(a−b)=a2−b2(a+b)(a-b)=a^2-b^2

#include<bits/stdc++.h>
using namespace std;
string x,y;
int a[501],b[501],a2[1002],b2[1002],ans[1002];
int main(){
	//freopen("square.in","r",stdin);
	//freopen("square.out","w",stdout);
	cin>>x>>y;
	for(int i=0;i<x.size();i++)a[i+1]=x[x.size()-i-1]-'0';
	for(int i=0;i<y.size();i++)b[i+1]=y[y.size()-i-1]-'0';
	a[0]=x.size();
	b[0]=y.size();
	for(int i=1;i<=a[0];i++){
		for(int j=1;j<=a[0];j++){
			a2[i+j-1]+=a[i]*a[j];
		}
	}
	for(int i=1;i<=a[0]*2;i++){
		a2[i+1]+=a2[i]/10;
		a2[i]%=10;
	}
	if(a2[a[0]*2])a2[0]=a[0]*2;
	else a2[0]=a[0]*2-1;
	for(int i=1;i<=b[0];i++){
		for(int j=1;j<=b[0];j++){
			b2[i+j-1]+=b[i]*b[j];
		}
	}
	for(int i=1;i<=b[0]*2;i++){
		b2[i+1]+=b2[i]/10;
		b2[i]%=10;
	}
	if(b2[b[0]*2])b2[0]=b[0]*2;
	else b2[0]=b[0]*2-1;
	for(int i=1;i<=a2[0];i++){
		if(a2[i]<b2[i]){
			a2[i]+=10;
			a2[i+1]--;
		}
		ans[i]=a2[i]-b2[i];
	}
	if(ans[a2[0]])ans[0]=a2[0];
	else ans[0]-a2[0]-1;
	if(ans[0]==0){
		printf("0");
		return 0;
	}
	for(int i=ans[0];i>=1;i--)printf("%d",ans[i]);
	return 0;
}

2024/7/17 12:07
加载中...