多项式最好用结构体储存,并进行处理。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 2000 + 10;//范围正负一千 相乘之后正负两千
int preinda[maxn], preindb[maxn];//指数
int precofa[maxn], precofb[maxn];//系数
int poscof[maxn], negcof[maxn];//乘积多项式
int possum[maxn], negsum[maxn];//求和多项式
int n, m;
int ind, cof;
int main(){
scanf("%d",&n);
for(int i = 0; i < n; i++){
scanf("%d%d",&cof,&ind);
preinda[i] = ind; precofa[i] = cof;
if(ind >= 0){//正指数 系数
possum[ind] += cof;
}
else negsum[ind] += cof;
}
scanf("%d", &m);
for(int i = 0; i < m; i++){
scanf("%d%d",&cof,&ind);
preindb[i] = ind; precofb[i] = cof;
if(ind >= 0) possum[ind] += cof;
else negsum[ind] += cof;
}
int cnt = 0;
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
int x = preinda[i] + preindb[j];//指数 可能为负值
int y = precofa[i]*precofb[j];//系数
//out[cnt++] = x;//存储 出现过的指数
if(x>=0){
poscof[x] += y;
}
else{//负指数 系数
x = -x;
negcof[x] += y;
}
}
}
//乘积多项式
for(int i = maxn; i >= 0; i--){//输出正指数
if(poscof[i]){
if(cnt == 0) printf("%d %d", poscof[i], i);
else printf(" %d %d", poscof[i], i);
cnt++;
}
}
for(int i = 1; i < maxn; i++){
if(negcof[i]){
if(cnt == 0) printf("%d %d",negcof[i], -i);
else printf(" %d %d",negcof[i], -i);
cnt++;
}
}
if(cnt == 0) printf("0 0");
printf("\n");
cnt = 0;
for(int i = maxn; i >= 0; i--){//输出正指数
if(possum[i]){
if(cnt == 0) printf("%d %d", possum[i], i);
else printf(" %d %d", possum[i], i);
cnt++;
}
}
for(int i = 1; i < maxn; i++){
if(negsum[i]){
if(cnt == 0) printf("%d %d",negsum[i], -i);
else printf(" %d %d",negsum[i], -i);
cnt++;
}
}
if(cnt == 0) printf("0 0");
printf("\n");
//system("pause");
return 0;
}
仅供参考 切勿抄袭
hang hang hang !!!