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;
}
相关文章推荐
- 02-线性结构2 一元多项式的乘法与加法运算(20 分)
- 02-线性结构2 一元多项式的乘法与加法运算(20 分)
- 02-线性结构2 一元多项式的乘法与加法运算(20 分)
- 02 - 线性结构 2 一元多项式的乘法与加法运算 (20 分)
- 02-线性结构2 一元多项式的乘法与加法运算(20 分) 用结构数组的方法
- 02-线性结构1 一元多项式的乘法与加法运算
- 02-线性结构2 一元多项式的乘法与加法运算
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算
- C++ 02-线性结构2 一元多项式的乘法与加法运算
- [PAT] 02-线性结构2 一元多项式的乘法与加法运算
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- PAT数据结构_02-线性结构2 一元多项式的乘法与加法运算 (20分)
- [数据结构]02-线性结构2 一元多项式的乘法与加法运算
- 02-线性结构1 一元多项式的乘法与加法运算
- 02-线性结构1 一元多项式的乘法与加法运算
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)