读书人

多项式相乘~小弟我如何的不到正确结果

发布时间: 2012-03-06 20:47:55 作者: rapoo

多项式相乘~我怎么的不到正确结果,请大虾帮帮忙~~
#include <iostream.h>
class List;


class Item
{
friend class List;
private:

double quot;
int exp;
Item *next;
public:
Item(double _quot,int _exp)
{quot=_quot;exp=_exp;next=NULL;}//1 初始化各元素 quot系数,exp指数
};


class List
{
private:

Item *list;

public:
List()
{
list=NULL;
}
void reverseList();
void multiplyList(List L1,List L2);
void createList();
};

void List::createList()
{
Item *p,*u,*pre;
int exp;
double quot;
list=NULL;
while(1)
{
cout < < "输入多项式中的一项(系数,指数): " < <endl;
cin> > quot> > exp;

if(exp < 0)
break; //指数小于0,输入结束
if(exp == 0)
continue;
p=list;
while(p != NULL && p-> exp > exp)//2 查找插入点,插入
{
pre=p;
p=p-> next;
}

if(p != NULL && exp == p-> exp)//输入的指数与前面的相同,将系数相加
{
p-> quot+=quot;
continue;
}

u=new Item(quot,exp);//3 p为空,表中就u一项
if(p == list)
list = u;
else
pre-> next = u; //非空,把u插入到指定位置
u-> next = p;
}
}

void List::reverseList()
{
Item *p,*u;
if(list==NULL)
return; //为空 退出

p=list-> next;
list-> next=NULL;

while(p!=NULL)
{
u=p-> next;
p-> next=list;
list=p;
p=u;
}


}

void List::multiplyList(List L1,List L2)
{
Item *pL1,*pL2,*u;
int k,maxExp;
double quot;

maxExp=L1.list-> exp + L2.list-> exp;//4

L2.reverseList();
list=NULL;

for(k = maxExp;k > = 0;k --)
{
pL1 = L1.list;
while(pL1!=NULL && pL1-> exp > k)
pL1 = pL1-> next;

pL2 = L2.list;
while(pL2!=NULL && (pL1-> exp + pL2-> exp) < k)//5
pL2 = pL2-> next;

quot=0.0;
while(pL2!=NULL && pL1!=NULL )
{
if((pL1-> exp + pL2-> exp) == k)
{
quot += pL1-> quot*pL2-> quot;//6
pL1=pL1-> next;
pL2=pL2-> next;
}
else if((pL1-> exp + pL2-> exp) > k)
pL1=pL1-> next;
else
pL2=pL2-> next;
}
if(quot!=0.0)
u=new Item(quot,k);
u-> next=list;
list=u;
}

L2.reverseList();


}


void main()
{
List L1,L2,L;
cout < < "创建第一个多项式链表\n ";L1.createList();
cout < < "创建第二个多项式链表\n ";L2.createList();


L.multiplyList(L1,L2);
}

[解决办法]
while(pL2!=NULL &&pL1!=NULL&& (pL1-> exp + pL2-> exp) < k)//5



if(quot!=0.0)
{
u=new Item(quot,k);
u-> next=list;
list=u;
}

另外指数为0会错,因为你没处理

读书人网 >C++

热点推荐