C++用链表实现两个多项式相乘,结果存放在一个新建链表中。求高手指点 !!!

财富值还可以加!!.

你好!第一个链表的特点是多项式中不存在的项看作该项系数为0,即系数需输入输出0;
第二个链表的特点是多项式中不存在的项不需要输入和输出,只需输入输出存在项的系数和次数。
程序一:
#include "iostream.h"
struct node //定义结点类型(a为多项式某一项的系数,b为对应项的次数)
{
float a;
int b;
struct node *next;
};
struct node *fx(int n) //建立链表并输入多项式函数
{
struct node *head=NULL; //首先定义表头指针为空
struct node *tail,*newnode; //定义表尾指针tail
float x;
for(int i=0;i<=n;i++) //生成长度为n+1的链表并对数据域a,b赋值
{
cout<<"输入该多项式次数为"<<i<<"的项的系数"<<endl;
cin>>x;
newnode=new node;
newnode->a=x;
newnode->b=i;
if(head==NULL)
head=newnode;
else
tail->next=newnode;
tail=newnode;
}
tail->next=NULL;
struct node *p=head;
cout<<"该多项式为:"<<endl;
cout<<"P=";
while(p!=NULL)
{
if(p->next!=NULL)
cout<<p->a<<"*x^"<<p->b<<"+";
else
cout<<p->a<<"*x^"<<p->b;
p=p->next;
}
cout<<endl;
return(head);
}
struct node *fy(int n1,int n2) //建立长度为max{n1,n2}的新链表并赋各项系数a初始值为0
{
struct node *head=NULL;
struct node *tail,*newnode;
int max=n1;
if(n1<n2)max=n2;
for(int i=0;i<=max;i++)
{
newnode=new node;
newnode->a=0;
newnode->b=i;
if(head==NULL)
head=newnode;
else
tail->next=newnode;
tail=newnode;
}
tail->next=NULL;
return(head);
}
void main()
{
struct node *head1,*head2,*head3;
int n1,n2;
cout<<"请输入第一个多项式的最高项次数"<<endl;
cin>>n1;
head1=fx(n1);
cout<<"请输入第二个多项式的最高项次数"<<endl;
cin>>n2;
head2=fx(n2);
head3=fy(n1,n2);
struct node *p1=head1,*p2=head2,*p3=head3;
while((p1!=NULL)&&(p2!=NULL))
{
p3->a=p1->a+p2->a; //求和后的多项式系数等于要求和的两个多项式对应项系数相加
p1=p1->next;
p2=p2->next;
p3=p3->next;
}
if(p1==NULL) //n1<n2时,那么求和后多项式中n1后(n1+1,n1+2...n2)的项的系数直接等于n2多项式中对应项的系数
while(p2!=NULL)
{
p3->a=p2->a;
p2=p2->next;
p3=p3->next;
}
if(p2==NULL) ////n1>n2时,那么求和后多项式中n2后(n2+1,n2+2...n1)的项的系数直接等于n1多项式中对应项的系数
while(p1!=NULL)
{
p3->a=p1->a;
p1=p1->next;
p3=p3->next;
}
p3=head3;
cout<<"两个多项式相加后为:"<<endl;
cout<<"P=";
while(p3!=NULL)
{
if(p3->next!=NULL)
cout<<p3->a<<"*x^"<<p3->b<<"+";
else
cout<<p3->a<<"*x^"<<p3->b;
p3=p3->next;
}
cout<<endl;
}

程序二:
#include "iostream.h"
struct node //定义结点类型(a为多项式某一项的系数,b为对应项的次数)
{
float a;
int b;
struct node *next;
};
struct node *fx(int n) //建立链表并输入多项式函数
{
struct node *head=NULL; //首先定义表头指针为空
struct node *tail,*newnode; //定义表尾指针tail
int b;
float a;
for(int i=0;i<n;i++) //生成长度为n的链表并对数据域a,b赋值
{
cout<<"输入该多项式第"<<(i+1)<<"项的系数:"<<endl;
cin>>a;
cout<<"输入该多项式第"<<(i+1)<<"项的次数:"<<endl;
cin>>b;
newnode=new node;
newnode->a=a;
newnode->b=b;
if(head==NULL)
head=newnode;
else
tail->next=newnode;
tail=newnode;
}
tail->next=NULL;
struct node *p=head;
cout<<"该多项式为:"<<endl;
cout<<"P=";
while(p!=NULL)
{
if(p->next!=NULL)
cout<<p->a<<"*x^"<<p->b<<"+";
if(p->next==NULL)
cout<<p->a<<"*x^"<<p->b<<endl;
p=p->next;
}
return(head);
}
struct node *fy(int n1,int n2) //建立长度为n1+n2的新链表并赋a,b初始值为0
{
struct node *head=NULL;
struct node *tail,*newnode;
for(int i=0;i<(n1+n2);i++)
{
newnode=new node;
newnode->a=0;
newnode->b=0;
if(head==NULL)
head=newnode;
else
tail->next=newnode;
tail=newnode;
}
tail->next=NULL;
return(head);
}
void main()
{
struct node *q,*head1,*head2,*head3;
int n1,n2;
cout<<"请输入第一个多项式的项数"<<endl;
cin>>n1;
head1=fx(n1);
cout<<"请输入第二个多项式的项数"<<endl;
cin>>n2;
head2=fx(n2);
head3=fy(n1,n2);
struct node *p1=head1,*p2=head2,*p3=head3;
while((p1!=NULL)&&(p2!=NULL))
{
if(p1->b>p2->b)
{
p3->a=p2->a;
p3->b=p2->b;
p2=p2->next;
p3=p3->next;
}
else if(p1->b<p2->b)
{
p3->a=p1->a;
p3->b=p1->b;
p1=p1->next;
p3=p3->next;
}
else if(p1->b==p2->b)
{
if((p1->a+p2->a)!=0)
{
p3->a=p1->a+p2->a; //求和后的多项式系数等于要求和的两个多项式对应项系数相加,q最后指向p3中有效的最后一个结点
p3->b=p1->b;
p1=p1->next;
p2=p2->next;
q=p3;
p3=p3->next;
}
else
{
p1=p1->next;
p2=p2->next;
q=p3;
}
}
}
if(p1==NULL) //n1<n2时,那么求和后多项式中n1后的项的系数直接等于n2多项式中对应项的系数,q最后指向p3中有效的最后一个结点
while(p2!=NULL)
{
p3->a=p2->a;
p3->b=p2->b;
p2=p2->next;
q=p3;
p3=p3->next;
}
if(p2==NULL) ////n1>n2时,那么求和后多项式中n2后的项的系数直接等于n1多项式中对应项的系数,q最后指向p3中有效的最后一个结点
while(p1!=NULL)
{
p3->a=p1->a;
p3->b=p1->b;
p1=p1->next;
q=p3;
p3=p3->next;
}
p3=q;
p3->next=NULL;
p3=head3;
cout<<"两个多项式相加后为:"<<endl;
cout<<"P=";
while(p3!=NULL)
{
if(p3->next!=NULL)
cout<<p3->a<<"*x^"<<p3->b<<"+";
if(p3->next==NULL)
cout<<p3->a<<"*x^"<<p3->b<<endl;
p3=p3->next;
}
}

(好辛苦的,提高点采纳哦,嘻嘻)
您好,很高兴为您解答 希望能够帮助您
如果本题有什么不明白欢迎追问
祝你学习进步!追问

我写了一个,但是没有把它存到一个新建的多项式是中,你能不能帮我改一下?把结果存到新项中。

追答

蒽你先给我看一下吧

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-26
AB两个多项式,用A中每一项循环遍历乘B得到若干个新链表,结果相加即可
相似回答