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

📄 17.cpp

📁 这是一个关于多项式相加减的程序
💻 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 + -