一元多项式加法运算问题运行无法实现一般情况(即任意输入项式的指数或系数值)输出,如何解决?
一元多项式加法运算问题运行无法实现一般情况(即任意输入项式的指数或系数值)输出,如何解决?各位大神,求帮忙,我在解决一元多项式的过程中,无法实现一般化数据输入。
问题在于:如果我第一个和第二个项式均为F(x)=2x的平方+3x的三次方,那么就一元多项式的加法出错了,可是如果第一个项式为F(x)=2x的平方+3x的三次方,而第二个项式为F(x)=2x的平方+4x的四次方,那么一元多项式的加法就没有错误。
#include <iostream.h>
typedef struct
{
int xi;//系数
int zhi;//指数
}ElemType;
typedef struct LNode
{
ElemType data; //结点的数据部分
struct LNode *next;
} LinkList;
//初始化链表
void InitList(LinkList *&L)
{
L=new LinkList;
L->next=NULL;
}
//插入一个数据结点e到有序链表中
void InsertList(LinkList *&L,ElemType e)
{
LinkList *r,*s;//r是循环用的结点指针,s是插入的新结点
r=L;
//寻找新插入结点的位置
while(r->next!=NULL&&e.zhi>r->next->data.zhi)
r=r->next;
s=new LinkList;
s->data.xi=e.xi; s->data.zhi=e.zhi;
//将e的值赋给s指针所指结点
s->next=r->next;
r->next=s;
}
//两个多项式相加
void AddList(LinkList *&L,LinkList *Lc)
{
LinkList *r,*s;
ElemType p;
r=L;
s=Lc;
if(r->next!=NULL && s->next!=NULL)
{
while(s->next->data.zhi==r->next->data.zhi)
{
r->next->data.xi=s->next->data.xi+r->next->data.xi;
s=s->next;
}
p.xi=s->next->data.xi;
p.zhi=s->next->data.zhi;
InsertList(L,p);
r=r->next;
}
}
//遍历线性表
void DispList(LinkList *L)
{
LinkList *p=L->next;
cout<<"F(X)=";
while(p)
{
cout<<p->data.xi<<"X^"<<p->data.zhi;
if(p->next!=NULL&&p->next->data.xi>0)
cout<<"+";
p=p->next;
}
cout<<endl;
}
//主程序部分
void main()
{
LinkList *La,*Lc;
InitList(La);
InitList(Lc);
int i=0;ElemType k,f;
cout<<"输入第一个一元多项式:"<<endl;
do
{
cout<<"请输入第"<<i+1<<"项的系数:";
cin>>k.xi;
cout<<"请输入第"<<i+1<<"项的指数:";
cin>>k.zhi;
i++;
cout<<endl;
if(k.xi!=0 && k.zhi!=0)
InsertList(La,k);
}while(k.xi!=0 && k.zhi!=0);
cout<<"输入第二个一元多项式:"<<endl;
i=0;
do
{
cout<<"请输入第"<<i+1<<"项的系数:";
cin>>f.xi;
cout<<"请输入第"<<i+1<<"项的指数:";
cin>>f.zhi;
i++;
cout<<endl;
if(f.xi!=0 && f.zhi!=0)
InsertList(Lc,f);
}while(f.xi!=0 && f.zhi!=0);
AddList(La,Lc);
DispList(La);
}