题目要求
已知一元多项式:A(x)=a0+a1x+a2x2+a3x3+….anxn, B(x)= b0+b1x+b2x2+b3x3+….bmxm设计算法实现C(x)=A
(x)+B(x)。功能包括输入多项式A,输入多项式B,求A和B的和,显示求和后的结果等操作。本题中,链表的第
一个元素位置为1,链表的数据域包含coef和exp,其中coef为系数,exp为指数。
各个命令以及相关数据的输入格式如下:
输入多项式A:A,接下来的n行是要输入的多项式,每一行数据有两个值,
第一个值代表系数,第二个值代表指数,当第一个值为0时,多项式A输入结束
输入多项式B:B,接下来的n行是要输入的多项式,每一行数据有两个值,
第一个值代表系数,第二个值代表指数,当第一个值为0时,多项式B输入结束
求多项式A和B的和:任意键;
当输入的命令为E时,程序结束
整个代码
#include<iostream>
using namespace std;
class elem
{
public:
elem(int m,int n)
{
coef=m; //系数
exp=n; //指数
}
int coef;
int exp;
elem*next;
};
class Elem
{
public:
Elem(); //构造函数
~Elem() //析构函数
{
elem*q=NULL;
elem*p=first;
while(p!=NULL)
{
q=p;
p=p->next;
delete q;
}
}
elem*first; //一元多项式单链表的头指针
};
Elem::Elem()
{
first=new elem(0,0); //申请头结点
elem*r=first; //尾插法建立单链表
int m;
int n;
cin>>m>>n; //输入第一项的系数和指数
while(m!=0) //循环结束条件是系数为0
{
elem*s=new elem(m,n);
r->next=s;
r=s; //将结点s插入单链表尾部
cin>>m>>n;
}
r->next=NULL;
}
void mix(Elem&A,Elem&B)
{
elem *a = A.first, *b = B.first; //工作指针初始化
while(a && b)
{
if(a->exp < b->exp) //第一种情况
{
cout<<a->coef<<" "<<a->exp<<endl;
a = a->next;
}
else if(a->exp > b->exp) //第二种情况
{
cout<<b->coef<<" "<<b->exp<<endl;
b = b->next;
}
else //第三种情况
{
int tmp = a->coef + b->coef;
if(tmp)
cout<<tmp<<" "<<a->exp<<endl;
a = a->next;
b = b->next;
}
}
}
int main()
{
char c;
cin>>c;
Elem A;
cin>>c;
Elem B;
cin>>c;
mix(A,B);
cin>>c;
return 0;
}
示例运行结果
结构分析
1、构造一元多项式,尾插法建立单链表,输入系数与指数,循环结束条件是系数为0。
2、一元多项式求和比较两多项式:若某两项指数相同,则将其系数相加,指数不变的输出。其他情况就是直接输出各自单独的系数指数。
主函数里面定义两个对象,构造两个一元多项式,然后运行框里面任意输入一个字符调用函数mix(Elem&A,Elem&B),完成求和的要求。