#include<iostream>
using namespace std;
struct node{
int coef;
int expn;
node* next;
};
class Poly{
private:
node* head;
public:
Poly();
void CreatPoly(int n);
Poly Add(Poly & L1,Poly & L2,Poly L3);
Poly Substract(Poly & L1,Poly & L2,Poly L3);
void Print(Poly &L);
};
Poly::Poly(){
head=new node;
head->next=NULL;
}
void Poly::CreatPoly(int n){
int i;
node* tmp;
node* p=head;
for(i=0;i<n;i++){
cin>>tmp->coef>>tmp->expn;
tmp->next=NULL;
p->next=tmp;
p=tmp;
}
}
Poly Poly::Add(Poly &L1,Poly &L2,Poly L3){
node *pa,*pb,*pc,*s;
pa=L1.head->next;
pb=L2.head->next;
pc=L3.head->next;
if(pa==NULL) return L2;
if(pb==NULL) return L1;
while(pa!=NULL&&pb!=NULL){
if(pa->expn<pb->expn){
s=new node;
s->coef=pa->coef;
s->expn=pa->expn;
s->next=NULL;
pc->next=s;
pc=s;
pa=pa->next;
}
if(pa->expn>pb->expn){
s=new node;
s->coef=pb->coef;
s->expn=pb->expn;
s->next=NULL;
pc->next=s;
pc=s;
pb=pb->next;
}
else{
if((pa->coef+pb->coef)!=0){
s=new node;
s->coef=pa->coef;
s->expn=pa->expn;
s->next=NULL;
pc->next=s;
pc=s;
}
pa=pa->next;
pb=pb->next;
}
}
return L3;
}
Poly Poly::Substract(Poly &L1,Poly &L2,Poly L3){
node* pa=L1.head->next;
node* pb=L2.head->next;
node* pc=L3.head->next;
node* p;
while(pa!=NULL&&pb!=NULL){
p=pb;
while(p!=NULL){
p->coef=(-p->coef);
p=p->next;
}
}
L3.Add(L1,L2,L3);
}
void Poly::Print(Poly &L){
node* p=L.head->next;
while(p!=NULL){
cout<<p->coef<<" "<<p->expn;
p=p->next;
}
cout<<endl;
}
int main(){
Poly l1,l2,l3;
l1.CreatPoly(2);
l2.CreatPoly(2);
l1.Add(l1,l2,l3);
l3.Print(l3);
}
c++实现一元多项式的运算
最新推荐文章于 2022-11-02 18:58:22 发布