程序每次运行到乘法那里就会中断,出现下面这个错误,看不懂啥意思问题位置已经标出来了,代码在下面,求大神指点一下。combine函数是为了在进行乘法之后把系数相同的合并,按照系数从小到大排列
kernel32.dll!773b338a() 未知
[下面的框架可能不正确和/或缺失,没有为 kernel32.dll 加载符号]
ntdll.dll!77ea9f72() 未知
ntdll.dll!77ea9f45() 未知
#include<iostream>
#include<windows.h>
#include<cmath>
using namespace std;
class LNode
{
private:
int p;//系数
int e;//指数
class LNode *next;
public:
friend class LinkList;
};
class LinkList
{
private:
class LNode *head;
public:
LinkList();
void create(int m);
void traverse();//输出
int length();//当前长度
void Listinsert( int px,int ex);//添加项系数p,指数e
void add(LinkList *l1);//多项式相加
void sub(LinkList *l1);//多项式相减
void getstate(int x);//多项式的求值
void multi(LinkList *l,LinkList *L);//乘法
void combine(LNode *p);//合并多项式
};
//构造函数
LinkList::LinkList()
{
head=new LNode;
head->next=NULL;
}
//创建多项式
void LinkList::create(int m)
{
int i=0;
LNode *P;
P=head;
while(i<m)
{
LNode *q;
q=new LNode;
int px,ex;
cin>>px>>ex;
q->e=ex;
q->p=px;
q->next=NULL;
P->next=q;
P=P->next;
i++;
}
}
//输出多项式
void LinkList::traverse()
{
LNode *P=head->next;
cout<<"P"<<length()<<"(x)=";
while(P)
{
if(P->p!=0)
{
if(P->p>0)
{
cout<<P->p<<"x^"<<P->e;
if(P->next!=NULL)cout<<'+';
P=P->next;
}
else
{
cout<<'('<<P->p<<')'<<"x^"<<P->e;
if(P->next!=NULL)cout<<'+';
P=P->next;
}
}
else
{
P=P->next;
}
}
}
//长度
int LinkList::length()
{
LNode *P=head->next;
int i=0;
while(P)
{
i++;
P=P->next;
}
return i;
}
void LinkList::Listinsert(int px,int ex)
{
LNode *P=head->next,*q;
while(P->next) {P=P->next;}
q=new LNode;
q->e=ex,q->p=px;
P->next=q;
q->next=NULL;
}
//多项式求值
void LinkList::getstate(int x)
{
LNode *P=head->next;
int n=0;
while(P)
{
n=n+P->p*pow(x,P->e);
P=P->next;
}
cout<<"P"<<length()<<'('<<x<<")="<<n<<endl;
}
//多项式相乘
void LinkList::multi(LinkList *l,LinkList *L)
{
LNode *i=L->head->next,*j=l->head->next,*q;
while(i&&j)
{
while(j)
{
q->e=i->e+j->e; //问题所在处
q->p=i->p*j->p;
combine(q);
j=j->next;
}
i=i->next;
}
}
void LinkList::combine(LNode *q)
{
LNode *px=head;
while(px->next&&px->next->e<q->e)
{
px=px->next;
}
if(px->next==NULL)
{
px->next=new LNode;
px->next->e=q->e;
px->next->p=q->p;
}
else if(px->next->e==q->e)
{
px->next->p=px->next->p+q->p;
}
else
{
LNode *n;
n=px->next;
px->next=q;
q->next=n;
}
}
int main()
{
LinkList *l1=new LinkList(),*l2=new LinkList(),*l3=new LinkList();
cout<<"请输入多项式长度n1"<<endl;
int n1,x;
cin>>n1;
cout<<"请按照指数由小到大的顺序输入多项式的系数、指数"<<endl;
l1->create(n1);
l1->traverse();
cout<<"请输入x的取值"<<endl;
cin>>x;
l1->getstate(x);
cout<<endl<<"请输入多项式长度n2"<<endl;
int n2;
cin>>n2;
cout<<"请按照指数由小到大的顺序输入多项式的系数、指数"<<endl;
l2->create(n2);
l2->traverse();
cout<<"上述两式相乘"<<endl;
l3->multi(l1,l2);
l3->traverse();
system("pause");
return 0;
}
kernel32.dll!773b338a() 未知
[下面的框架可能不正确和/或缺失,没有为 kernel32.dll 加载符号]
ntdll.dll!77ea9f72() 未知
ntdll.dll!77ea9f45() 未知
#include<iostream>
#include<windows.h>
#include<cmath>
using namespace std;
class LNode
{
private:
int p;//系数
int e;//指数
class LNode *next;
public:
friend class LinkList;
};
class LinkList
{
private:
class LNode *head;
public:
LinkList();
void create(int m);
void traverse();//输出
int length();//当前长度
void Listinsert( int px,int ex);//添加项系数p,指数e
void add(LinkList *l1);//多项式相加
void sub(LinkList *l1);//多项式相减
void getstate(int x);//多项式的求值
void multi(LinkList *l,LinkList *L);//乘法
void combine(LNode *p);//合并多项式
};
//构造函数
LinkList::LinkList()
{
head=new LNode;
head->next=NULL;
}
//创建多项式
void LinkList::create(int m)
{
int i=0;
LNode *P;
P=head;
while(i<m)
{
LNode *q;
q=new LNode;
int px,ex;
cin>>px>>ex;
q->e=ex;
q->p=px;
q->next=NULL;
P->next=q;
P=P->next;
i++;
}
}
//输出多项式
void LinkList::traverse()
{
LNode *P=head->next;
cout<<"P"<<length()<<"(x)=";
while(P)
{
if(P->p!=0)
{
if(P->p>0)
{
cout<<P->p<<"x^"<<P->e;
if(P->next!=NULL)cout<<'+';
P=P->next;
}
else
{
cout<<'('<<P->p<<')'<<"x^"<<P->e;
if(P->next!=NULL)cout<<'+';
P=P->next;
}
}
else
{
P=P->next;
}
}
}
//长度
int LinkList::length()
{
LNode *P=head->next;
int i=0;
while(P)
{
i++;
P=P->next;
}
return i;
}
void LinkList::Listinsert(int px,int ex)
{
LNode *P=head->next,*q;
while(P->next) {P=P->next;}
q=new LNode;
q->e=ex,q->p=px;
P->next=q;
q->next=NULL;
}
//多项式求值
void LinkList::getstate(int x)
{
LNode *P=head->next;
int n=0;
while(P)
{
n=n+P->p*pow(x,P->e);
P=P->next;
}
cout<<"P"<<length()<<'('<<x<<")="<<n<<endl;
}
//多项式相乘
void LinkList::multi(LinkList *l,LinkList *L)
{
LNode *i=L->head->next,*j=l->head->next,*q;
while(i&&j)
{
while(j)
{
q->e=i->e+j->e; //问题所在处
q->p=i->p*j->p;
combine(q);
j=j->next;
}
i=i->next;
}
}
void LinkList::combine(LNode *q)
{
LNode *px=head;
while(px->next&&px->next->e<q->e)
{
px=px->next;
}
if(px->next==NULL)
{
px->next=new LNode;
px->next->e=q->e;
px->next->p=q->p;
}
else if(px->next->e==q->e)
{
px->next->p=px->next->p+q->p;
}
else
{
LNode *n;
n=px->next;
px->next=q;
q->next=n;
}
}
int main()
{
LinkList *l1=new LinkList(),*l2=new LinkList(),*l3=new LinkList();
cout<<"请输入多项式长度n1"<<endl;
int n1,x;
cin>>n1;
cout<<"请按照指数由小到大的顺序输入多项式的系数、指数"<<endl;
l1->create(n1);
l1->traverse();
cout<<"请输入x的取值"<<endl;
cin>>x;
l1->getstate(x);
cout<<endl<<"请输入多项式长度n2"<<endl;
int n2;
cin>>n2;
cout<<"请按照指数由小到大的顺序输入多项式的系数、指数"<<endl;
l2->create(n2);
l2->traverse();
cout<<"上述两式相乘"<<endl;
l3->multi(l1,l2);
l3->traverse();
system("pause");
return 0;
}