📄 多项式.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 + -