一元多项式加减

#include<iostream>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -1
typedef struct{
float coef;
int expn;
}elemtype;
typedef struct Lnode{
struct Lnode*next;
elemtype data;
}Lnode,*Linklist;
int InitLinklist(Linklist&L)
{
L=(Linklist)malloc(sizeof(Lnode));
if(!L)return ERROR;
L->next=NULL;
return 0;
}
int shuru(Linklist&L,int i)
{
Linklist S,A;A=L;
for(int j=0;j<i;j++)
{S=(Linklist)malloc(sizeof(Lnode));
cin>>S->data.coef;
cin>>S->data.expn;
S->next=A->next;
A->next=S;
A=S;
}
return 0;
}
int jiafa(Linklist &C,Linklist &A,Linklist &B){
Linklist m=C;
Linklist p=A->next;
Linklist q=B->next;
while(p&&q){
if(p->data.expn>q->data.expn&&p&&q){
Linklist v;
v=q;q=q->next;
v->next=m->next;
m->next=v;
m=v;}
else if(p->data.expn<q->data.expn){
Linklist u;
u=p;p=p->next;
u->next=m->next;
m->next=u;
m=u;}
else {
p->data.coef+=q->data.coef;
Linklist v;
v=p;p=p->next;
v->next=m->next;
m->next=v;
m=v;
q=q->next;}
}
if(p){m->next=p;}
else if(q){m->next=q;}

return 0;
}
int jianfa(Linklist &C,Linklist &A,Linklist &B)
{ Linklist m=C;
Linklist p=A->next;
Linklist q=B->next;
while(p&&q){
if(p->data.expn>q->data.expn){
q->data.coef=-(q->data.coef);
Linklist v;
v=q;q=q->next;
v->next=m->next;
m->next=v;
m=v;}
else if(p->data.expn<q->data.expn){

Linklist u;
u=p;p=p->next;
u->next=m->next;
m->next=u;
m=u;}
else{
p->data.coef-=q->data.coef;
Linklist v;
v=p;p=p->next;
v->next=m->next;
m->next=v;
m=v;
q=q->next;}
}
if(p){m->next=p;}
if(q){
m->next=q;
while(q)
{q->data.coef=-(q->data.coef);
q=q->next;}
}
return 0;
}
int shuchu(Linklist&L){
Linklist A=L->next;
cout<<A->data.coef<<"x^"<<A->data.expn;
A=A->next;
while(A){
if(A->data.coef>=0)
cout<<"+"<<A->data.coef<<"x^"<<A->data.expn;
else
cout<<A->data.coef<<"x^"<<A->data.expn;
A=A->next;
}
return 0;
}
int main(){
int i;
Linklist  L,M,N,S,P,Q;
InitLinklist(L);
InitLinklist(M);
InitLinklist(N);
InitLinklist(S);
InitLinklist(P);
InitLinklist(Q);
cout<<"关于次数从小到大输入多项式(每一项先输入系数后输入次数)"<<endl;
cout<<"输入两式做加法和减法运算"<<endl;
cout<<"请输入项数";
cin>>i;
shuru(L,i);
cout<<"您输入的是:"<<endl<<"y1=";
shuchu(L);cout<<endl;
cout<<"请输入项数";
cin>>i;
shuru(M,i);
cout<<"您输入的是:"<<endl<<"y2=";
shuchu(M);cout<<endl;
cout<<"y1+y2=";
jiafa(N,L,M);
shuchu(N);cout<<endl;


cout<<"请输入项数";
cin>>i;
shuru(P,i);
cout<<"您输入的是:"<<endl<<"y1=";
shuchu(P);cout<<endl;
cout<<"请输入项数";
cin>>i;
shuru(Q,i);
cout<<"您输入的是:"<<endl<<"y2=";
shuchu(Q);cout<<endl;
cout<<"y1-y2=";
jianfa(S,P,Q);
shuchu(S);cout<<endl;
return 0;
}









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值