题目描述
一个一元多项式可以看作由若干个一元单项式按降幂排列成的线性表。请编写程序对输入的两个一元多项式求和,并输出求和的结果。
输入
输入为两个一元多项式,每个一元多项式输入一行,按照降幂依次输入每个单项式的系数和指数,并以-1 -1作为结束。系数和指数均为整数,指数不小于0。
输出
输出为求和结果多项式,按照降幂依次输出每个单项的系数和指数,每个数值后面用一个空格隔开,输出结果多项式后换行。 系数为0的单项式不得输出——除非结果多项式就是0,则直接输出0。
样例输入 复制
2 7 3 5 12 1 6 0 -1 -1
7 5 9 4 3 0 -1 -1
样例输出 复制
2 7 10 5 9 4 12 1 9 0
提示
数据范围:每个多项式的数据项数量不超过10000
开个结构体,里面一个指数,一个系数,然后输入,再循环,若指数相同,系数则相加,同时,被加的那个结构体的指数置为-1(为了以后不输出),注意输出时,若系数为零,不输出,而且系数全为0时,输出0(包括未输入的情况)
代码如下:
#include<bits/stdc++.h>
using namespace std;
struct polynomial{
int xishu=0;
int zhishu=0;
}a[20000];
int sort1(polynomial a,polynomial b)
{
return a.zhishu>b.zhishu;
}
int main()
{
int xishu,zhishu;
int i=0,j=0,temp=0,temp1=0;
while(cin>>xishu>>zhishu)
{
if(xishu==-1&&zhishu==-1)
{
temp1++;
if(temp1==2)
break;
temp=i;
}
else
{
a[i].xishu=xishu;
a[i].zhishu=zhishu;
i++;
}
}
for(int k=0;k<temp;k++)
{
for(int l=temp;l<i;l++)
{
if(a[k].zhishu==a[l].zhishu)
{
a[k].xishu+=a[l].xishu;
a[l].zhishu=-1;
}
}
}
sort(a,a+i,sort1);
int temp3=0;
for(int m=0;m<i;m++)
{
if(a[m].zhishu!=-1)
if(a[m].xishu!=0)
{
temp3++;
}
}
for(int m=0;m<=i;m++)
{
if(temp3==0)
{
cout<<0;
break;
}
else if(a[m].xishu==0)
;
else
{
if(a[m].zhishu==-1)
;
else
cout<<a[m].xishu<<" "<<a[m].zhishu<<" ";
}
}
}