This time, you are supposed to find A+B where A and B are two polynomials.
Input Specification:
Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial:
K N1 aN1 N2 aN2 ... NK aNK
where K is the number of nonzero terms in the polynomial, Ni and aNi (i=1,2,⋯,K) are the exponents and coefficients, respectively. It is given that 1≤K≤10,0≤NK<⋯<N2<N1≤1000.
Output Specification:
For each test case you should output the sum of A and B in one line, with the same format as the input. Notice that there must be NO extra space at the end of each line. Please be accurate to 1 decimal place.
Sample Input:
2 1 2.4 0 3.2
2 2 1.5 1 0.5
Sample Output:
3 2 1.5 1 2.9 0 3.2
题目大意:多项式相加,输出不为0的项的个数,以及各项次数和系数
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
typedef struct Polo //保存多项式的系数和次方值
{
int N; //次方
float a; //系数
}p;
int main()
{
int k1, k2;
cin >> k1;
p poly1[k1];
for(int i=0;i<k1;i++)
cin>>poly1[i].N>>poly1[i].a;
cin>>k2;
p poly2[k2];
for(int i=0;i<k2;i++)
cin>>poly2[i].N>>poly2[i].a;
poly1[k1].N = -1; //设置标志,判断多项式是否运算结束
poly2[k2].N = -1;
poly1[k1].a = 0;
poly2[k2].a = 0;
int i=0,j=0,k=0;
p poly3[k1+k2];
while(poly1[i].N!=-1||poly2[j].N!=-1)
{
if(poly1[i].N>poly2[j].N) //按多项式次数高低顺序求和
{
poly3[k] = poly1[i];
k++;
i++;
}
else if(poly1[i].N<poly2[j].N)
{
poly3[k] = poly2[j];
k++;
j++;
}
else
{
poly3[k].N = poly1[i].N;
poly3[k].a = poly1[i].a+poly2[j].a;
k++;
i++;
j++;
}
}
int count=0;
for(int i=0;i<k;i++) //求项个数
if(poly3[i].a!=0)
count++;
cout<<count;
for(int i=0;i<k;i++) //不为0则输出
if(poly3[i].a!=0)
printf(" %d %.1f",poly3[i].N,poly3[i].a);
return 0;
}