⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 多项式.cpp

📁 学数据结构时候写的多项式的相加相减,采用简单的几个类,实现多项式的相加相减
💻 CPP
字号:
#include<iostream>
using namespace std;
struct XPower{
	int cof;//系数coefficient
	int power;//幂数
	XPower* next;
};
typedef XPower* link;
class XPowerMult{//多项式multinomial
private:
	link head;
public:
	XPowerMult(){head=new XPower;head->next=NULL;}
	void AddXP(int cof1,int po1);
	bool isempty(){if(this->head->next) return false;else return true;}
	~XPowerMult(){}
	XPowerMult operator+(XPowerMult xp2)
	{ 
        XPowerMult xp;
	    link p=(xp2.head)->next;
		for(int i=0;i<2;i++){
	    for(;p;)
		{
		    xp.AddXP(p->cof,p->power);
			p=p->next;
		}
		p=this->head->next;
		}
	    return xp;
	}
	 XPowerMult operator-(XPowerMult);
	 XPowerMult operator*(XPowerMult);
	//friend ostream& operator<<(ostream&,const XPowerMult);
	//friend istream& operator>>(istream&,const XPowerMult);
friend ostream& operator<<(ostream& out,const XPowerMult& xp1){
	    link p=xp1.head->next;
		if(!p) out<<"0";
		else
        for(;p;)
		{
		     if(p==xp1.head->next||p->cof<0) out<<p->cof<<"X^"<<p->power;
		     else out<<"+"<<p->cof<<"X^"<<p->power;
		     p=p->next;
		}   

	return out;
}


friend istream& operator>>(istream& in, XPowerMult xp1){
         cout<<"Please input 多项式的系数和次幂,如果输入结束.\n请输入0 0"<<endl;
         int cof1=1,po1=1;
             in>>cof1;
			 in>>po1;
		 for(;cof1!=0||po1!=0;)
		 {
             if(cof1==0);
			 else xp1.AddXP(cof1,po1);
			 in>>cof1;
			 in>>po1;
		 }
		 return in;
}

};

void XPowerMult::AddXP(int cof1,int po1){//插入并按降幂排列
	link q=head->next;
	link inspt=head;
	for(;(q!=NULL)&&(q->power > po1);)
	{
		inspt=q;
		q=q->next;
	}
	if(q==NULL) 
	{link p=new XPower;
	  p->cof=cof1;
	  p->power=po1;
	  p->next=q;
	  inspt->next=p;
	}
    else if(q->power==po1) 
	{
		q->cof+=cof1;
		if(q->cof==0)
		{
            inspt->next=inspt->next->next;
		}
	}
	else
	{
      link p=new XPower;
	  p->cof=cof1;
	  p->power=po1;
	  p->next=inspt->next;
	  inspt->next=p;
	}
}





XPowerMult XPowerMult::operator-(XPowerMult xpt2){
   XPowerMult xp;
   link p=xpt2.head->next;	
   link q=this->head->next;
   for(;p;)
	   {
		   xp.AddXP(-p->cof,p->power);
		   p=p->next;
		   //if(q){xp.AddXP(q->cof,q->power);q=q->next;}
	   }
/*	if(this->isempty()) ;
	else 
	{   
      for(p=this->head->next;p;)
	   {
		   xp.AddXP(p->cof,p->power);
		   p=p->next;
	   }
	}*/
		
		return xp;
}


XPowerMult XPowerMult::operator*(XPowerMult xpt2){
         XPowerMult xp3;
		 link p=this->head->next;
		 link q=xpt2.head->next;
		 if(this->isempty()||xpt2.isempty()) cout<<"0";
		 else
			 for(;p;)
			 {
				 for(q=xpt2.head->next;q;)
				 {
				 xp3.AddXP((p->cof)*(q->cof),(p->power)+(q->power));
				 q=q->next;
				 }
			 
				 p=p->next;
			 }
			 return xp3;
}


int main(){
	
	char c='y';
	while(1){
	XPowerMult xp1,xp2;
cout<<"请输入多项式xp1:";
	cin>>xp1;
cout<<"请输入多项式xp2:";
	cin>>xp2;
/*	xp3=xp1+xp2;
cout<<"A+B="<<xp3<<"\n";
   xp3=xp1-xp2;
   cout<<"A "<<xp1<<endl;
   cout<<"B "<<xp2<<endl;
   cout<<"C "<<xp3<<endl;
cout<<"A-B="<<xp3+xp1<<endl;
	xp3=xp1*xp2;
   cout<<"A "<<xp1<<endl;
   cout<<"B "<<xp2<<endl;
cout<<"A*B="<<xp3<<"\n";*/
	
 if(xp1.isempty()&&xp2.isempty()) cout<<"都为零";
 if(xp1.isempty()&&!xp2.isempty()) 
{
	cout<<"A+B="<<xp2<<"\n"
		<<"A*B=0\n"
		<<"A-B="<<xp1+(xp1-xp2);

}
 if(!xp1.isempty()&&xp2.isempty())
{
    cout<<"A+B="<<xp1<<"\n"
		<<"A*B=0\n"
		<<"A-B="<<xp1;
}
if(!xp1.isempty()&&!xp2.isempty())
{ 
     cout<<"A+B="<<xp1+xp2<<"\n"
		<<"A*B="<<xp1*xp2<<"\n"
		<<"A-B="<<xp1+(xp1-xp2);
}
cout<<"如果你想退出 输入:N或n。否则输入其他"<<endl;
cin>>c;
if(c=='N'||c=='n') break;
	}
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -