一个一元多项式的相加问题。(C++编写,各位大虾指点)
scgjc 2003-04-30 06:47:15 程序主要目的是将两个多项式相加。每个多项式是一个链表,根据两个多项式的X的指数判断进行插入删除等操作,最后将合并后的多项式输出到屏幕上。我写的程序编译通过,但运算结果不正确。问题主要在多项式相加那一块。还请各位高手指教。
代码如下:
#include<iostream>
using namespace std;
struct ListNode //多项式的单项定义
{
int coef;
int exp;
ListNode *next;
};
//////////////////////////////////////////////////////////////////////
//多项式类polynomial的定义
class Polynomial
{
public:
ListNode *pNode;
ListNode *head; //链首指针
ListNode *pEnd; //链尾指针
public:
//////////////////////////////////////////////////////////////////
//构造函数
Polynomial()
{
pNode=new ListNode; //注意:pNode是一个指针
int i=0;
head=pNode;
pEnd=pNode;
while(pNode->coef!=0)
{
pEnd->next=pNode;
pEnd=pNode;
pNode=new ListNode;
i++;
cout<<"请输入第"<<i<<"项的系数:";
cin>>pNode->coef;
cout<<"请输入第"<<i<<"项的指数:";
cin>>pNode->exp;
}
pEnd->next=0;
delete pNode;
}
/////////////////////////////////////////////////////////////////////
/////遍历
void ShowList(ListNode *head)
{
ListNode *p=head;
cout<<"此多项式为: ";
if(p)
{
p=p->next;
cout<<p->coef<<"X("<<p->exp<<")";
p=p->next;
}
while(p)
{
cout<<"+"<<p->coef<<"X("<<p->exp<<")";
p=p->next;
}
cout<<endl;
}
/////////////////////////////////////////////////////////////////
///指数比较
char compare(int a,int b)
{
if(a>b) return '>';
if(a=b) return '=';
if(a<b) return '<';
}
/////////////////////////////////////////////////////////////////
///多项式相加
Polynomial AddPoly(Polynomial &ah,Polynomial &bh)
{
ListNode *pa,*pb,*pc,*pd,*p;
pa=pc=ah.head;
pb=pd=bh.head;
pa=pa->next;
pb=pb->next;
while( pa && pb)
{
switch( compare(pa->exp,pb->exp))
{
case '<':
pa=pa->next;
pc=pc->next;
break;
case '=':
pa->coef=pa->coef+pb->coef;
if(pa->coef)
{
pa=pa->next;
pc=pc->next;
pb=pb->next;
pd=pd->next;
}
else
{
p=pa;
pa=pa->next;
pc=p->next;
p=pb;
pb=pb->next;
pd=p->next;
}
break;
case '>':
p=pb;
pb=pb->next;
p->next=pc->next;
pc->next=p;
break;
}
}
if(pa->next=NULL) p->next=pb;
return ah;
}
};
/////////////////////////////////////////////////////////////////////
/////主函数
void main()
{
Polynomial a;
a.ShowList(a.head);
Polynomial b;
b.ShowList(b.head);
Polynomial c=a.AddPoly(a,b);
c.ShowList(c.head);
}