# 02-线性结构1 一元多项式的乘法与加法运算

02-线性结构1 一元多项式的乘法与加法运算   (20分)

### 输入样例:

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 <stdio.h>
#include <stdlib.h>

typedef struct node{
int coefficient;
int exponent;
struct node * next;
} PolyNode, *Polynomial;

void Attach(int c, int e, Polynomial * Rear);
Polynomial MultPoly(Polynomial P1, Polynomial P2);
void PrintPoly(Polynomial P);

int main(int argc, char const *argv[])
{
Polynomial Poly1, Poly2, PolySum, PolyMul;

PolyMul = MultPoly(Poly1, Poly2);
PrintPoly(PolyMul);
PrintPoly(PolySum);

return 0;
}

{
Polynomial P, Rear, temp;
P = (PolyNode*)malloc(sizeof(PolyNode));
P->next = NULL;
Rear = P;
int N, c, e;
scanf("%d", &N);
while(N--){
scanf("%d %d", &c, &e);
Attach(c, e, &Rear);
}
temp = P;
P = P->next;
free(temp);
return P;
}

void Attach(int c, int e, Polynomial * pRear)
{
Polynomial P;
P = (PolyNode*)malloc(sizeof(PolyNode));
P->coefficient = c;
P->exponent = e;
P->next = NULL;
(*pRear)->next = P;
*pRear = P;
}

Polynomial MultPoly(Polynomial P1, Polynomial P2)
{
Polynomial P, temp1, temp2, Rear, temp;
int c, e;
if(!P1 || !P2)
return NULL;
temp1 = P1;
temp2 = P2;
P = (PolyNode*)malloc(sizeof(PolyNode));
P->next = NULL;
Rear = P;
while(temp2){
c = temp1->coefficient * temp2->coefficient;
e = temp1->exponent + temp2->exponent;
if(c != 0){
Attach(c, e, &Rear);
temp2 = temp2->next;
}
}
temp1 = temp1->next;
while(temp1){
temp2 = P2, Rear = P;
while(temp2){
c = temp1->coefficient * temp2->coefficient;
e = temp1->exponent + temp2->exponent;
if(c != 0){
while(Rear->next && Rear->next->exponent > e)
Rear = Rear->next;
if(Rear->next && Rear->next->exponent == e){
if(Rear->next->coefficient + c)
Rear->next->coefficient += c;
else{
temp = Rear->next;
Rear->next = temp->next;
free(temp);
}
}
else{
temp = (PolyNode*)malloc(sizeof(PolyNode));
temp->coefficient = c;
temp->exponent = e;
temp->next = Rear->next;
Rear->next = temp;
Rear = Rear->next;
}
temp2 = temp2->next;
}
}
temp1 = temp1->next;
}
temp = P;
P = P->next;
free(temp);
return P;
}

{
Polynomial P, temp1, temp2, Rear, temp;
if(!P1 && !P2){
if(!P1)
return P2;
else
return P1;
}
P = (PolyNode*)malloc(sizeof(PolyNode));
P->next = NULL;
Rear = P;
temp1 = P1;
temp2 = P2;
while(temp1 && temp2){
if(temp1->exponent > temp2->exponent){
if(temp1->coefficient){
Attach(temp1->coefficient, temp1->exponent, &Rear);
}
temp1 = temp1->next;
}
else if(temp1->exponent == temp2->exponent){
if(temp1->coefficient + temp2->coefficient){
Attach(temp1->coefficient + temp2->coefficient, temp1->exponent, &Rear);
}
temp1 = temp1->next;
temp2 = temp2->next;
}
else{
if(temp2->coefficient){
Attach(temp2->coefficient, temp2->exponent, &Rear);
}
temp2 = temp2->next;
}
}
while(temp1){
Attach(temp1->coefficient, temp1->exponent, &Rear);
temp1 = temp1->next;
}
while(temp2){
Attach(temp2->coefficient, temp2->exponent, &Rear);
temp2 = temp2->next;
}
temp = P;
P = P->next;
free(temp);
return P;
}

void PrintPoly(Polynomial P)
{
int flag = 0;
if(!P){
printf("0 0");
}
while(P){
if (!flag)
flag = 1;
else
printf(" ");
printf("%d %d", P->coefficient, P->exponent);
P = P->next;
}
printf("\n");
}


• 本文已收录于以下专栏：

## 数据结构 PAT 02-线性结构1 一元多项式的乘法与加法运算

02-线性结构1 一元多项式的乘法与加法运算 设计函数分别求两个一元多项式的乘积与和。 输入格式: 输入分2行，每行分别先给出多项式非零项的个数，再以指数递降方式输入一个多项式非零项系数和指数...
• cs_hmyy
• 2015年09月30日 19:19
• 865

## 7-1 一元多项式的乘法与加法运算（20 point(s)）

7-1 一元多项式的乘法与加法运算（20 point(s)） 设计函数分别求两个一元多项式的乘积与和。 输入格式: 输入分2行，每行分别先给出多项式非零项的个数，再以指数递降方式输入...
• codeswarrior
• 2017年11月10日 21:38
• 206

## PTA--一元多项式的乘法与加法运算

• u011240016
• 2016年10月04日 19:46
• 1001

## 02-线性结构2 一元多项式的乘法与加法运算 (20分)

• wanmeiwushang
• 2016年09月22日 18:43
• 4115

## PAT 一元多项式的乘法与加法运算(链表 c++版)

• chaiwenjun000
• 2015年09月09日 22:45
• 3528

## 5-2 一元多项式的乘法与加法运算 (20分)

5-2 一元多项式的乘法与加法运算   (20分) 设计函数分别求两个一元多项式的乘积与和。 输入格式: 输入分2行，每行分别先给出多项式非零项的个数，再以指数递降方式输入一个多...
• qq_26437925
• 2015年10月10日 10:33
• 1113

## 02-线性结构1 一元多项式的乘法与加法运算 (20分)

02-线性结构1 一元多项式的乘法与加法运算   (20分) 设计函数分别求两个一元多项式的乘积与和。 输入格式: 输入分2行，每行分别先给出多项式非零项的个数，再以指数递降...
• sysusyf
• 2016年03月26日 16:51
• 1322

## c++一元多项式的乘法和加法

• tianjun2012
• 2014年03月26日 20:28
• 1173

## 02-线性结构1 一元多项式的乘法与加法运算

#include #include typedef struct node{ int coefficient; int exponent; struct node * next; } P...
• asunamashiro
• 2015年09月17日 15:00
• 3789

## PAT 3-04 一元多项式的乘法与加法运算（C语言实现）

• wutongyu0113
• 2014年10月03日 15:14
• 1563

举报原因： 您举报文章：02-线性结构1 一元多项式的乘法与加法运算 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)