12. 多项式加法

【问题描述】

一个多项式可以表示为一组数对,数对中第一个数始终为整数,且唯一,表示多项式的次数,另一数表示为对应的系数且不为0。输入两组数对,每组以0 0作为结束,实现对两个多项式的加法并按降幂输出结果数对

【输入形式】

每行输入一个数对,以空格为分隔符,以0 0结束

【输出形式】

每行输出一个数对,以空格为分隔符

【样例输入】

5 12
3 8
1 2
15 5
0 10
0 0
3 12
30 1
15 5
0 0

【样例输出】

30 1
15 10
5 12
3 20
1 2
0 10
#include<bits/stdc++.h>
using namespace std;
struct math {
	int x;//系数
	int c;//次数
};
bool cmp(math a,math b) {
	if(a.x!=b.x)
		return a.x>b.x;
}
math m1[10000];
math m2[10000];
math m3[10000];//用来存储最后结果
int main() {
	int a,b;
	int sum1=0;
	int sum2=0;
	while(cin>>a>>b&&(a!=0||b!=0)) {
		m1[sum1].x=a;
		m1[sum1].c=b;
		sum1++;
	}
	while(cin>>a>>b&&(a!=0||b!=0)) {
		m2[sum2].x=a;
		m2[sum2].c=b;
		sum2++;
	}
	int k=0;
	for(int i=0; i<sum1; i++) {
		for(int j=0; j<sum2; j++) {
			if(m1[i].x==m2[j].x) { //系数相等时
				m1[i].c+=m2[j].c;
				m2[j].x=0;
				m2[j].c=0;//让他们相加过的化为0
			}
		}
	}
	int key=0;
	for(int i=0; i<sum1; i++) {
		if(m1[i].c!=0||m1[i].x!=0) {
			m3[i].x=m1[i].x;
			m3[i].c=m1[i].c;
			key++;
		}
	}
	for(int i=0; i<sum2; i++) {
		if(m2[i].c!=0||m2[i].x!=0) {
			m3[key].x=m2[i].x;
			m3[key].c=m2[i].c;
			key++;
		}
	}
	sort(m3,m3+key,cmp);
	for(int i=0; i<key; i++) {
		if(m3[i].c==0)continue;//如果系数为0,就不输出了 
		cout<<m3[i].x<<' '<<m3[i].c<<endl;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值