📄 12121.cpp
字号:
#include<iostream.h>
class term
{public:
term(int c,int e);
term(int c,int e,term* nxt);
term*insertafter(int c,int e);
private:
int coef;//系数
int exp; //指数
term*link;
friend ostream & operator<<(ostream&,const term &);
friend class polynominal;
};
term::term(int c,int e):coef(c),exp(e)
{link=0;
}
term::term(int c,int e,term*nxt):coef(c),exp(e)
{link=nxt;
}
term*term::insertafter(int c,int e)
{link=new term(c,e,link);
return link;
}
ostream &operator<<(ostream & out,const term & val)
{if(val.coef==0) return out;
else if(val.coef==1&&val.exp!=0) out<<""; //如果系数为1,就不显示系数
else
out<<val.coef;
switch(val.exp){
case 0:break;
case 1:out<<"X";break;
default:out<<"X^"<<val.exp;break;
}
return out;
}
class polynominal
{public:
polynominal();
~polynominal();
void addterms(istream& in);
void output(ostream& out)const;
void polyadd(polynominal& r);
void polysub(polynominal& r);
void polymul(polynominal& r);
private:
term* thelist;
friend ostream & operator <<(ostream &,const polynominal &);
friend istream & operator >>(istream&,polynominal &);
friend polynominal &operator +(polynominal &,polynominal &);
friend polynominal &operator -(polynominal &,polynominal &);
friend polynominal &operator *(polynominal &,polynominal &);
};
polynominal::polynominal()
{thelist=new term(0,-1);
thelist->link=thelist;
}
polynominal::~polynominal()
{term* p=thelist->link;
while(p!=thelist){
thelist->link=p->link;
delete p;
p=thelist->link;
}
delete thelist;
}
void polynominal::addterms(istream & in)
{term* q=thelist;
int c,e;
for(;;){
cout<<"请输入一个多项式(coef,exp):\n"<<endl;
cin>>c>>e;
if(e<0)break;
q=q->insertafter(c,e);
}
}
void polynominal::output(ostream & out)const
{int first=1;term * p=thelist->link;
cout<<"输出多项式为:\n"<<endl;
for(;p!=thelist;p=p->link){
if(!first && (p->coef>0))out<<"+";
first=0;
out<<*p;
}
cout<<"\n"<<endl;
}
void polynominal::polyadd(polynominal&r)//加法
{term* q,*q1=thelist,*p;
p=r.thelist->link;
q=q1->link;
while(p->exp>=0)
{
while(p->exp<q->exp)
{
q1=q;q=q->link;
}
if(p->exp==q->exp)
{q->coef=q->coef+p->coef;
p=p->link;
if(q->coef==0)
{
q1->link=q->link;delete(q);
q=q1->link;
}
else
{
q1=q;q=q->link;
}
}
else
{ q1=q1->insertafter(p->coef,p->exp);
p=p->link;
}
}
}
void polynominal::polysub(polynominal & r) //减法
{term* q,*q1=thelist,*p;
p=r.thelist->link;
q=q1->link;
while(p->exp<q->exp)
{
q1=q;q=q->link;
}
if(p->exp==q->exp)
{
q->coef=q->coef-(p->coef);
p=p->link; ///////////////////////////////
if(q->coef==0)
{
q1->link=q->link;delete(q);
q=q1->link;
}
else
{
q1=q;q=q->link;
}
}
else
{p->coef=0-(p->coef); ///////////////////////////////////
q1=q1->insertafter(p->coef,p->exp);
p=p->link;
}
}
ostream& operator<<(ostream & out,const polynominal &x)
{x.output(out);return out;
}
istream& operator >>(istream& in,polynominal &x)
{x.addterms(in);return in;
}
polynominal&operator +(polynominal &a,polynominal &b)
{a.polyadd(b);return a;
}
polynominal&operator -(polynominal &a,polynominal &b)
{a.polysub(b);return a;
}
void main()
{polynominal p,q;
int i,n=0,m=0;
cin>>q;cout<<q;
cin>>p;cout<<p;
th:cout<<"请选择要进行的操作:"<<endl<<"1。运行q+p"<<endl<<"2。运行q-p"<<endl<<"3。运行q*p"<<endl<<"其他:退出"<<endl;
cin>>i;
switch(i){
case 1:if(m){q=q+p+p;m=0;cout<<q;goto th;}
else {q=q+p;cout<<q;n=1;goto th;}
case 2:if(n)
{q=q-p-p;cout<<q;n=0;goto th;}
else {q=q-p;cout<<q;m=1;goto th;}
case 3:cout<<"Byebye~"<<endl;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -