傳送門
題目
02-線性結構2 一元多項式的乘法與加法運算(20 分)
設計函數分別求兩個一元多項式的乘積與和。
輸入格式:
輸入分2行,每行分別先給出多項式非零項的個數,再以指數遞降方式輸入一個多項式非零項系數和指數(絕對值均為不超過1000的整數)。數字間以空格分隔。
輸出格式:
輸出分2行,分別以指數遞降方式輸出乘積多項式以及和多項式非零項的系數和指數。數字間以空格分隔,但結尾不能有多余空格。零多項式應輸出0 0。
輸入樣例:
4 3 4 -5 2 6 1 -2 0
3 5 20 -7 4 3 1
輸出樣例:
15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
5 20 -4 4 -5 2 9 1 -2 0
目前代碼
#include <iostream>
#include <cstdlib>
using namespace std;
typedef struct _node {
int coef;
int expon;
struct _node *next;
} Node;
typedef struct _list {
} List;
int main(int argc, char const *argv[])
{
freopen("C:\\Users\\shmh2\\Documents\\test.txt", "r", stdin);
Node list1, list2, list3;
Node *p;
int n1, n2;
cin >> n1;
int i;
p = &list1;
for ( i=0; i<n1; i++ ) {
p->next = (Node*)malloc(sizeof(Node));
p = p->next;
cin >> p->coef >> p->expon;
}
p->next = NULL;
cin >> n2;
p = &list2;
for ( i=0; i<n2; i++ ) {
p->next = (Node*)malloc(sizeof(Node));
p = p->next;
cin >> p->coef >> p->expon;
}
p->next = NULL;
Node *p1 = list1.next;
Node *p2 = list2.next;
//
p = &list3;
int coef, expon;
while ( p1 ) {
while ( p2 ) {
expon = p1->expon + p2->expon;
coef = p1->coef * p2->coef;
p->next = (Node*)malloc(sizeof(Node));
p = p->next;
p->coef = coef;
p->expon = expon;
//cout << coef << " " << expon;
//if ( expon ) cout << " ";
// if ( p1->expon == 0 ) p2 = p2->next;
// else if ( p2->expon == 0 ) p1 = p1->next;
// else {
// if ( p1->expon < p2->expon) p1 = p1->next;
// else if ( p1->expon > p2->expon) p2 = p2->next;
// else p1 = p1->next;
// }
p2 = p2->next;
}
}
cout << endl;
//
int cnt = 0;
p1 = list1.next;
p2 = list2.next;
while ( p1 && p2 ) {
cnt++;
if ( p1->expon < p2->expon ) {
cout << p2->coef << " " << p2->expon;
p2 = p2->next;
}else if ( p1->expon > p2->expon ) {
cout << p1->coef << " " << p1->expon;
p1 = p1->next;
} else {
int sum;
sum = p1->coef + p2->coef;
if ( sum ) {
cout << sum << " " << p1->expon;
}
p1 = p1->next;
p2 = p2->next;
cnt++;
}
if ( cnt < n1 + n2 ) cout << " ";
}
if ( p1 || p2 ) {
for ( ; p1; p1=p1->next ) {
cnt++;
cout << p1->coef << " " << p1->expon;
if ( cnt < n1 + n2 ) cout << " ";
}
for ( ; p2; p2=p2->next ) {
cnt++;
cout << p2->coef << " " << p2->expon;
if ( cnt < n1 + n2 ) cout << " ";
}
}
cout << "\\";
return 0;
}