设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分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 <stdio.h>
#include <stdlib.h>
#define ERROR -1
typedef struct Node *PtrToNode;
struct Node{
int coef;
int expn;
struct Node *next;
};
typedef PtrToNode List;
void creatpolyn(List L,int m);
void Print(List L);
List multiplypolyn(List L1, List L2);
List addpolyn(List L1, List L2);
int main()
{
List L1, L2, mulres, addres;
int m, n;
L1 = (List)malloc(sizeof(struct Node));
L2 = (List)malloc(sizeof(struct Node));
L1->next=L2->next = NULL;
scanf("%d", &m);
creatpolyn(L1,m);
scanf("%d", &n);
creatpolyn(L2,n);
mulres = multiplypolyn(L1, L2);
addres = addpolyn(L1, L2);
Print(mulres);
Print(addres);
return 0;
}
void creatpolyn(List L,int m)
{
int i;
List pl;
pl = L;
for(i=0;i<m;i++)
{
List s;
s = (List)malloc(sizeof(struct Node));
scanf("%d%d", &s->coef, &s->expn);
s->next = NULL;
pl->next=s;
pl=pl->next;
}
}
void Print(List L)
{
List pl;int flag = 0;
pl = L->next;
while(pl)
{
if(!flag)
printf("%d %d", pl->coef, pl->expn);
else
printf(" %d %d", pl->coef, pl->expn);
pl = pl->next;
flag++;
}
if(!flag)
printf("0 0");
printf("\n");
}
List addpolyn(List L1, List L2)
{
int i;
List L3, p1, p2, p3;
L3 = (List)malloc(sizeof(struct Node));
L3->next = NULL;
p3 = L3;p1 = L1->next;p2 = L2->next;
while(p1&&p2)
{
List t;
t = (List)malloc(sizeof(struct Node));
if(p1->expn>p2->expn)
{
t->coef = p1->coef;t->expn=p1->expn;
p1=p1->next;
}
else if(p1->expn == p2->expn)
{
if(p1->coef+p2->coef==0)
{
p1 = p1->next;p2=p2->next;
continue;
}
t->coef=p1->coef+p2->coef;
t->expn=p1->expn;
p1 = p1->next;p2=p2->next;
}
else
{
t->coef = p2->coef;t->expn=p2->expn;
p2=p2->next;
}
t->next=NULL;
p3->next = t;
p3 = p3->next;
}
while(p1)
{
List t;
t = (List)malloc(sizeof(struct Node));
t->coef = p1->coef;
t->expn=p1->expn;
p1=p1->next;
t->next=NULL;
p3->next = t;
p3 = p3->next;
}
while(p2)
{
List t;
t = (List)malloc(sizeof(struct Node));
t->coef = p2->coef;
t->expn=p2->expn;
p2=p2->next;
t->next=NULL;
p3->next = t;
p3 = p3->next;
}
return L3;
}
List multiplypolyn(List L1, List L2)
{
List p1, p2, res;
res = (List)malloc(sizeof(struct Node));
res->next = NULL;
p1 = L1->next;
p2 = L2->next;
if(p1&&p2)
{
while(p2)
{
List temp, pt;
temp = (List)malloc(sizeof(struct Node));
temp->next = NULL;pt=temp;
while(p1)
{
List s;
s = (List)malloc(sizeof(struct Node));
s->next = NULL;
s->coef = p1->coef*p2->coef;
s->expn = p1->expn+p2->expn;
if(s->coef==0)
{
p1=p1->next;
continue;
}
pt->next = s;
pt=pt->next;
p1=p1->next;
}
res = addpolyn(res, temp);
p1=L1->next;
p2=p2->next;
}
}
return res;
}