多项式乘法
//多项式乘法代码段
#include
#include
#include
using namespace std;
struct Node{
int coef;
int exp;
Node *next;
};
void CreatePoly(Node *&h)
{
int coef,exp;
void PrintPoly1(Node *);
Node *r;
h=r=new Node;
if(r==NULL) {cout
h->exp=-1;
cout
cin>>coef>>exp;
while(coef!=0)
{
r->next=new Node;
if(r->next==NULL) {cout
r=r->next;
r->coef=coef;
r->exp=exp;
cin>>coef>>exp;
}
r->next=h;
cout
}
void PrintPoly(Node *h)
{
Node *p;
int f=0;
if(h->next==h) { cout
return ;
}
p=h->next;
while(p!=h)
{
if(f==0) {coutcoef; f++;}
else { if(p->coef>0) cout
coutcoef;}
switch(p->exp){
case 0: break;
case 1: cout
break;
default: cout
coutexp;
break;
}
p=p->next;
}
cout
}
void MultPoly(Node *&hc,Node *ha,Node *hb) //乘法函数
{
Node *p,*q,*pa,*pb,*pc,*r;
hc=new Node;
hc->exp=-1;
pa=ha->next;
pb=hb->next;
pc=hc;
while(pa!=ha) //用bn * ha建立hc链表
{
r=new Node;
r->coef=(pa->coef)*(pb->coef);
r->exp=pa->exp+pb->exp;
pc->next=r;
r->next=hc;
pc=pc->next;
pa=pa->next;
}
pb=pb->next;
while(pb!=hb) //hb后n-1项*ha的多项式乘法展开 {
pa=ha->next;
while(pa!=ha)
{
r=new Node;
r->coef=(pa->coef)*(pb->coef);
r->exp=pa->exp+pb->exp;
pc=hc->next;
while(pc->exp>r->exp)
{
p=pc;
pc=pc->next;
}
if(pc->exp==r->exp)
{
pc->coef+=r->coef;
}
if(pc->expexp)
{
p->next=r;
r->next=pc;
pc=r;
}
pa=pa->next;
}
pb=pb->next;
}
pc=hc->next;p=hc;
while(hc->next->coef==0){
p->next=pc->next;
p=pc;
pc=pc->next;
delete p;
p=hc;
}
while(pc!=hc)
{
p=pc;
pc=pc->next;
while(pc->coef==0)
{
p->next=pc->next;
p=pc;
pc=pc->next;
delete p;
}
}
}
//规范hc输出
int main()
{
Node *ha,*hb,*hc;
CreatePoly(ha);
PrintPoly(ha);
CreatePoly(hb);
PrintPoly(hb);
MultPoly(hc,ha,hb);
PrintPoly(hc);
}
//测试多项式
// 2X^8-3X^6+2X^3-4X+2
//4X^6+8X^4
//结果: 8X^14+4X^12-24X^10+8x^9+8X^6-32X^5+16X^4
//结果截
图