C++多项式求和

 

//Multinomial.cpp 计算多个多项式的和
#include <iostream.h>
#include <assert.h>
class Multinomial
{
public:
 class Item
 {
 public:
  Item(){
   next=NULL;
  }
  Item(int i,int j){
   factor=i;
   exp=j;
   next=NULL;
  }
  ~Item(){}
 public:
  int factor;
  int exp;
  Item *next;
 };
 Multinomial(){
  size=0;
  head=NULL;
 }
 //void Init();
 Multinomial::Item *Init();
 void Rank();
 void Optimize();
 Multinomial & operator+(Multinomial &obj);
 Multinomial & operator=(Multinomial &obj);
 friend ostream & operator<<(ostream &output,Multinomial &obj);
 ~Multinomial(){}
public:
 int size;
 Item *head;
};
//void Multinomial::Init(){}
Multinomial::Item *Multinomial::Init(){
 cout<<"Input the size of the polynomial:"<<endl;
 cin>>size;
 Multinomial::Item *p,*q;
 int i=1,m,n;
 cout<<"Input the first factor:"<<endl;
 cin>>m>>n;
 head=new Multinomial::Item(m,n);
 p=head;
 while(i<size){
  cout<<"Input the No."<<++i<<" factor:"<<endl;
  cin>>m>>n;
  q=new Multinomial::Item(m,n);
  p->next=q;
  p=q;
  //q->next=NULL;
 }
 return head;
}
void Multinomial::Rank(){
 Multinomial::Item *p=head;
 assert(p);
 if(!p->next) return;
 Multinomial::Item *q=p,*m;
 //bool move=false;
 int n=1;
 while(n++<size){
  q=head;
  while(q->next){
   m=q->next;
   if(q->exp<m->exp){
    if(q==head)p=head=m;
    else{
     p->next=m;
     p=m;
    }
    q->next=m->next;
    m->next=q;
    //move=true;
   }
   else{
    p=q;
    q=q->next;
   }
  }
 }
}
void Multinomial::Optimize(){
 Multinomial::Item *p,*q;
 p=head;
 if(!p->next)return;
 while(p->next){
  q=p->next;
  if(p->exp==q->exp){
   p->next=q->next;
   p->factor+=q->factor;
   delete q;
  }
  else p=p->next;
 }
}
Multinomial & Multinomial::operator + (Multinomial &obj){
 Multinomial::Item *p,*m,*q,*n;
 p=m=head;
 q=n=obj.head;
 while(m&&n){
  if(m->exp>n->exp){
   p=m;
   m=m->next;
  }
  else if(m->exp==n->exp){
   m->factor+=n->factor;
   p=m;
   q=n;
   m=m->next;
   n=n->next;
  }
  else if(m->exp<n->exp){
   if(m==head)head=n;
   else p->next=n;
   q=n;
   n=n->next;
   q->next=m;
  }
 }
 if(!n)return *this;
 else if(!m)p->next=n;
 return *this;
}
Multinomial & Multinomial::operator =(Multinomial &obj){
 size=obj.size;
 head=obj.head;
 return *this;
}
ostream & operator <<(ostream &output,Multinomial &obj){
 output<<"The Multinomial is:"<<endl;
 //Multinomial::Item *p=head;
 Multinomial::Item *p=obj.head;
 while(p->next){
  output<<p->factor<<"x^"<<p->exp<<"+";
  p=p->next;
 }
 output<<p->factor<<"x^"<<p->exp;
 return output;
}
int main(){
 /*Multinomial obj;
 obj.Init();
 cout<<obj<<endl;
 obj.Rank();
 cout<<obj<<endl;
 obj.Optimize();
 cout<<obj<<endl;
 Multinomial obj1=obj;
 cout<<obj1<<endl;*/
 Multinomial obj1,obj2;
 obj1.Init();
 obj1.Rank();
 obj1.Optimize();
 cout<<obj1<<endl;
 obj2.Init();
 obj2.Rank();
 obj2.Optimize();
 cout<<obj2<<endl;
 cout<<obj1+obj2<<endl;
 //obj1=obj1+obj2;
 //cout<<obj1<<endl;
 /*Multinomial::Item *p=obj.head;
 while(p->next){
  cout<<p->factor<<"x^"<<p->exp<<"+";
  p=p->next;
 }
 cout<<p->factor<<"x^"<<p->exp;*/
 return 0;
}

 

 

你可能感兴趣的:(C++多项式求和)