您的位置:首页 > 编程语言 > C语言/C++

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

2017-11-12 09:25 489 查看


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>

using namespace std; 

struct PolyNode{
int xishu;
int cishu;
PolyNode* Next;

};

using list=PolyNode*;

list Read(){
int n;
cin>>n;
list s=(list)malloc(sizeof(PolyNode));
list m=s;
s->Next=NULL;
while(n--)
{
int i,j;
cin>>i>>j;
list t=(list)malloc(sizeof(PolyNode));
t->xishu=i; t->cishu=j;
m->Next=t;
m=m->Next;
}
m->Next=NULL;
list temp=s;
s=s->Next;
free(temp);
return s;

}

void attach(int i,int j,list* l){
list m=(list)malloc(sizeof(PolyNode));
m->xishu=i; m->cishu=j;
m->Next=NULL;
(*l)->Next=m;
(*l)=m; 

}

list add(list l1,list l2)

{
list s=(list)malloc(sizeof(PolyNode));
list m=s;
s->Next=NULL;
while(l1&&l2)
{
if(l1->cishu==l2->cishu){
if(l1->xishu+l2->xishu)
attach(l1->xishu+l2->xishu,l1->cishu,&m);

        l1=l1->Next; l2=l2->Next;
}else if(l1->cishu<l2->cishu){
attach(l2->xishu,l2->cishu,&m);
l2=l2->Next;
}else if(l1->cishu>l2->cishu){
attach(l1->xishu,l1->cishu,&m);
l1=l1->Next;
}
}
while(l1){
attach(l1->xishu,l1->cishu,&m);
l1=l1->Next; 
}
while(l2){
attach(l2->xishu,l2->cishu,&m);
l2=l2->Next;
}

    list temp=s;

    s=s->Next;
free(temp);
return s;

}

list multiply(list l1,list l2)

{
list s,m,p,q;
p=l1; q=l2;
if(!p||!q)
return NULL;
s=(list)malloc(sizeof(PolyNode));
m=s;
s->Next=NULL;
while(q){
attach(p->xishu*q->xishu,p->cishu+q->cishu,&m);
q=q->Next;
}
p=p->Next; 
while(p){
q=l2;list rear=s;
while(q){
int sum=p->cishu+q->cishu;
int mul=p->xishu*q->xishu;
while(rear->Next&&(rear->Next)->cishu>sum)
rear=rear->Next;
if(rear->Next&&(rear->Next)->cishu==sum){
if((rear->Next)->xishu+mul)
(rear->Next)->xishu+=mul;
else
{list t=rear->Next;
rear->Next=t->Next;
free(t);
}

else {
list e=(list)malloc(sizeof(PolyNode));
e->xishu=mul; e->cishu=sum;
e->Next=rear->Next; rear->Next=e;
        }
q=q->Next;
}
p=p->Next;
}
   list temp=s;
s=s->Next;
free(temp);
return s;

 } 

void print(list li)

{
if(!li)
cout<<0<<" "<<0;
int tag=1;
while(li){
if(tag){
cout<<li->xishu<<" "<<li->cishu;
tag=0; li=li->Next;
}
else{
cout<<" "<<li->xishu<<" "<<li->cishu;
li=li->Next;
}
 
}
cout<<endl;

}

int main()

{
list l1=Read();
list l2=Read();
list l3=multiply(l1,l2);
list l4=add(l1,l2);
print(l3);
print(l4);
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: