📄 17.cpp
字号:
#include<iostream>
using namespace std;
struct Node
{
int Xishu; int Zhishu; Node *next;
};
Node *a[4]={NULL};
Node* Build(Node *g);
void Add(Node *li,Node *si);
void Output(Node *f,int mama);
void Minor(Node *qi,Node *guai);
int main ()
{int i=1;int j,mn;
while(i!=0)
{cout<<"这是一个实现二个多项式相加减的程序!!!"<<endl;
cout<<endl;
cout<<"此时创建您的第"<<i<<"个多项式!!"<<endl;cout<<endl;
cout<<"要继续输入数据请先输入'1'或其他整形数据否则算法不能正常执行!!!!";
cout<<"停止输入数据请输入 ' 0 ' !!"<<endl;
cin>>j;
if(j&&a[i]==NULL) a[i]=Build (a[i]);
cout<<"您执行了结束语句或者第一个多项式已经存在!!"<<endl;
Output(a[i],1); i++;
if (i>=3) break;
cout<<"要继续创建第"<<i<<"个多项式吗?是输入";
cout<<i<<",否则输入0"<<endl;
cin>>mn; i=mn;
if(0<mn&&mn<3)
continue;
else if(mn>=3)
{cout<<"wrong data!!"<<endl;break;}
else Output(a[i],1);
}
char k;
cout<<"你想要对你的多项式做什么?"<<endl;cout<<endl;
cout<<"多项式相加请输入 A,相减请输入M,";
cout<<"什么都不做请输入N."<<endl;
cin>>k;
switch(k)
{
case 'A':Add(a[2],a[1]);break;
case 'M':Minor(a[1],a[2]);break;
case 'N':break;
default :cout<<"错误的输入!!";}
return 0;}
Node *Build(Node *g)
{ int c;
if(g==NULL)
c=1;
while(c) //构造表达式的其余项
{ int k,l; Node *w; w=new Node;
cout<<"请输入要输入的数据的系数"<<endl;
cin>>l; w->Xishu=l;
cout<<"请输入要输入的数据的指数"<<endl;
cin>>k; w->Zhishu=k; w->next=NULL;
Node *q,*p; p=q=g;
if(g==NULL)
g=w;
while(q!=NULL) //将新结点按降序插入到链表中
{
if(w->Zhishu>g->Zhishu)
{w->next=g; g=w; q=p; p=p->next; break; }
if(p==NULL) { q->next=w; break;}
if(p->Zhishu==w->Zhishu)
{p->Xishu=p->Xishu+w->Xishu; delete w; break;}
if(p->Zhishu>w->Zhishu) {q=p; p=p->next; }
else{w->next=q->next; q->next=w;break;}
}
cout<<"要继续输入数据请先输入 '1',";
cout<<"停止输入数据请输入 ' 0 ' 。"<<endl;
cin>>c;}
return g;}
void Output(Node *f,int mama)//输出刚才创建的多项式
{Node *now; now=f;
switch(mama)
{
case 1:cout<<"您刚才输入的";break;
case 2:cout<<"做完加法的";break;
case 3:cout<<"做完减法的";}
cout<<"多项式按指数的降序排列得的结果是:"<<endl;
int z=0;
if(now==NULL)
cout<<"此多项式没有数据!!!"<<endl;
while(now!=NULL)
{if(now->next==NULL)
{
if(now->Xishu<0)
{ cout<<now->Xishu<<"X"<<now->Zhishu<<endl;z++;}
else if(z!=0)
{cout<<"+"<<now->Xishu<<"X"<<now->Zhishu<<endl;z++;}
else {cout<<now->Xishu<<"X"<<now->Zhishu<<endl;z++;}
break;}
else if(now->Xishu<0)
cout<<now->Xishu<<"X"<<now->Zhishu;
else if(z!=0)
{
cout<<"+"<<now->Xishu<<"X"<<now->Zhishu;}
else cout<<now->Xishu<<"X"<<now->Zhishu;
now=now->next; z++;
}
cout<<endl;
cout<<"这个多项式总共有"<<z<<"个项"<<endl;
}
void Add(Node *li,Node *si)//多项式相加
{Node *f1,*f2;
f1=li; f2=si; Node *pd,*now;
pd=now=new Node; now->next=NULL;
while(f1!=NULL&&f2!=NULL)
{
if(f1->Zhishu==f2->Zhishu)
{Node *d1; d1=new Node;
d1->Xishu=f1->Xishu+f2->Xishu;
d1->Zhishu=f1->Zhishu; d1->next=NULL;
now->next=d1; now=now->next;
f1=f1->next; f2=f2->next;}
else if(f1->Zhishu>f2->Zhishu)
{
Node *d2; d2=new Node;
d2->Xishu=f1->Xishu;
d2->Zhishu=f1->Zhishu; d2->next=NULL;
now->next=d2; now=now->next;
f1=f1->next;}
else if(f1->Zhishu<f2->Zhishu)
{Node *d3; d3=new Node;
d3->Xishu=f2->Xishu; d3->Zhishu=f2->Zhishu;
d3->next=NULL; now->next=d3;
now=now->next; f2=f2->next;}
}
if(f1==NULL&&f2!=NULL) now->next=f2;
else if(f1!=NULL&&f2==NULL)
now->next=f1; now=pd; now=now->next;
Output(now,2);//输出多项式的和
int ai,ni;
Node *xiang=NULL ,*hao;
cout<<"想要继续加多项式或减多项式吗?是,请输入'1'否则输入其他 !!!"<<endl;
cin>>ai;
if(ai==1)
{
pd=pd->next;
hao=Build(xiang);
Output(hao,1);
cout<<endl;
cout<<"要继续加请输入'1'要减请输入其他 !!!"<<endl;
cin>>ni;
if(ni==1)
Add(hao,pd);
else
Minor(pd,hao);
}
}
void Minor(Node *qi,Node *guai) //多项式相减
{
Node *k1,*k2;
k1=qi; k2=guai; Node *pc,*current;
pc=current=new Node;
while(k1!=NULL&&k2!=NULL)
{if(k1->Zhishu==k2->Zhishu)
{Node *n1; n1=new Node;
n1->Xishu=k1->Xishu-k2->Xishu;
n1->Zhishu=k1->Zhishu; n1->next=NULL;
current->next=n1; current=current->next;
k1=k1->next; k2=k2->next;}
else if(k1->Zhishu>k2->Zhishu)
{Node *n2; n2=new Node;
n2->Xishu=k1->Xishu; n2->Zhishu=k1->Zhishu;
n2->next=NULL; current->next=n2;
current=current->next;k1=k1->next;}
else if(k1->Zhishu<k2->Zhishu)
{Node *n3; n3=new Node;
n3->Xishu=-k2->Xishu; n3->Zhishu=k2->Zhishu;
n3->next=NULL; current->next=n3;
current=current->next; k2=k2->next;}
}
if(k1==NULL&&k2!=NULL)
while(k2!=NULL)
{ current->next=k2;current=current->next;
current->Xishu=-k2->Xishu;k2=k2->next;
}
if(k1!=NULL&&k2==NULL)
current->next=k1;current=pc;
current=current->next;
Output(current,3);//多项式相减输出
int mai,mni;
Node *mxiang=NULL ,*mhao;
cout<<"想要继续加多项式或减多项式吗?是,请输入'1'否则输入其他 !!!"<<endl;
cin>>mai;
if(mai==1)
{
pc=pc->next;
mhao=Build(mxiang);
Output(mhao,1);
cout<<endl;
cout<<"要继续加请输入'1'要减请输入其他 !!!"<<endl;
cin>>mni;
if(mni==1)
Add(mhao,pc);
else
Minor(pc,mhao);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -