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
代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
typedef struct Polynomials {
int exp;
float cof;
struct Polynomials* next;
}P;
void CreatPolynomials(P* head, int n)
{
P* tmp, * p;
tmp = head;
tmp->next = NULL;
for (int i = 0; i < n; i++) {
p = (P*)malloc(sizeof(P));
cin >> p->exp >> p->cof;
p->next = NULL;
tmp->next = p;
tmp = p;
}
}
int main() {
int n;
cin >> n;
P* h = (P*)malloc(sizeof(P));
CreatPolynomials(h, n);
int n1;
cin >> n1;
P* h1 = (P*)malloc(sizeof(P));
CreatPolynomials(h1, n1);
P* t = h->next;
P* s = h1->next;
P* h2 = (P*)malloc(sizeof(P));
P* tmp1, *p1;
tmp1 = h2;
tmp1->next = NULL;
int count = 0;
while (s && t) {
if (s->exp == t->exp && (s->cof + t->cof != 0)) {
p1=(P*)malloc(sizeof(P));
p1->exp = s->exp;
p1->cof = s->cof + t->cof;
p1->next = NULL;
tmp1->next = p1;
tmp1 = p1;
count++;
s = s->next;
t = t->next;
}
else if(s->exp == t->exp && (s->cof + t->cof == 0)){
s=s->next;
t=t->next;
}
else if (s->exp > t->exp) {
p1 = (P*)malloc(sizeof(P));
p1->exp = s->exp;
p1->cof = s->cof;
p1->next = NULL;
tmp1->next = p1;
tmp1 = p1;
count++;
s = s->next;
}
else {
p1 = (P*)malloc(sizeof(P));
p1->exp = t->exp;
p1->cof = t->cof;
p1->next = NULL;
tmp1->next = p1;
tmp1 = p1;
count++;
t = t->next;
}
}
if (s != NULL&&t==NULL) {
while (s) {
p1 = (P*)malloc(sizeof(P));
p1->exp = s->exp;
p1->cof = s->cof;
p1->next = NULL;
tmp1->next = p1;
tmp1 = p1;
count++;
s = s->next;
}
}
if (t != NULL&&s==NULL) {
while (t) {
p1 = (P*)malloc(sizeof(P));
p1->exp = t->exp;
p1->cof = t->cof;
p1->next = NULL;
tmp1->next = p1;
tmp1 = p1;
count++;
t = t->next;
}
}
P* q = h2->next;
if(count==0)printf("%d",count);
else printf("%d ",count);
while (q) {
if(q->next!=NULL){
printf("%d %.1f ",q->exp,q->cof);
}
else{
printf("%d %.1f",q->exp,q->cof);
}
q = q->next;
}
return 0;
}