1002 A+B for Polynomials (25 分)
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 N
1
a
N
1
N
2
a
N
2
… N
K
a
N
K
where K is the number of nonzero terms in the polynomial, N
i
and a
N
i
(i=1,2,⋯,K) are the exponents and coefficients, respectively. It is given that 1≤K≤10,0≤N
K
<⋯<N
2
<N
1
≤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
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
typedef struct
{
int expo;
double coe;
} number;
//输入a,b
int ka,kb;
number a[22],b[22];
for(int q=0;q<22;q++)
{
a[q].expo=0;a[q].coe=0.0;
b[q].expo=0;b[q].coe=0.0;
}
cin>>ka;
for(int i=0; i<ka; i++)
cin>>a[i].expo>>a[i].coe;
cin>>kb;
for(int t=0; t<kb; t++)
cin>>b[t].expo>>b[t].coe;
int m=0,n=0,r=0;
number c[30];
//a+b
while(m<ka&&n<kb)
{
if(a[m].expo>b[n].expo)
{
c[r]=a[m];
m++;
r++;
}
else if(a[m].expo<b[n].expo)
{
c[r]=b[n];
n++;
r++;
}
else if(a[m].expo==b[n].expo&&a[m].coe+b[n].coe!=0)
{
c[r].expo=a[m].expo;
c[r].coe=a[m].coe+b[n].coe;
m++;
n++;
r++;
}
else
{
m++;
n++;
}
}
if(m>=ka)
for(n;n<kb;n++)
{c[r]=b[n];r++;}
if(n>=kb)
for(m;m<ka;m++)
{c[r]=a[m];r++;}
// 输出
// int length=(sizeof(c)/sizeof(c[0]));
cout<<r;
for(int q=0; q<r; q++)
printf(" %d %.1f", c[q].expo, c[q].coe);//注意限制一位小数
}
找一个小时的bug结果出错在保留一位小数你说心塞不、、、、