第1关:一元多项式的计算
本关任务:编写链表实现一元多项式的计算。
课本中介绍十分详细,如有不懂可看书
#include<iostream>
#include<string>
#include<fstream>
using namespace std;
#define ERROR 0
typedef struct PNode {
float coef; //系数
int expn; //指数
struct PNode *next;
} PNode, *Polynomial;
void CreatPolyn(Polynomial &P, int m) //算法2.18 多项式的创建
{
//输入m项的系数和指数,建立表示一个多项式的有序链表P
/********************************************Begin**********************************/
P = new PNode;
P -> next = NULL;
Polynomial k = P;
while(m -- )
{
Polynomial t = new PNode;
t -> next = NULL;
cin >> t -> coef >> t -> expn;
k -> next = t;
k = t;
}
/********************************************End***********************************/
} //CreatPolyn
void AddPolyn(Polynomial &Pa, Polynomial &Pb) //算法2.19 多项式的相加
{
//多项式加法:Pa=Pa+Pb,利用两个多项式的结点构成“和多项式”
/********************************************Begin**********************************/
Polynomial k = Pa,p = Pa -> next,q = Pb -> next;
while(p && q)
{
int a = p -> expn,b = q -> expn;
if(a < b)
{
k -> next = p;
k = p;
p = p -> next;
}
else if(a == b)
{
p -> coef += q -> coef;
if(p -> coef > 0)
{
k -> next = p;
k = p;
}
p = p -> next,q = q -> next;
}
else
{
k -> next = q;
k = q;
q = q -> next;
}
}
k -> next = p ? p : q;
/********************************************End***********************************/
} //AddPolyn
int main()
{
Polynomial Pa, Pb;
Polynomial p;
int i, n, m;
scanf("%d %d", &n, &m);
//创建多项式Pa
CreatPolyn(Pa, n); //调用函数,输入Pa每一项的系数和指数
//创建多项式Pb
CreatPolyn(Pb, m); //调用函数,输入Pa每一项的系数和指数
AddPolyn(Pa, Pb);
p = Pa->next;
i = 0;
while (p) //输出相加后的结果,每一项以x^n表示
{
if (i)
cout << " + ";
cout << "(" << p->coef << ") * x^" << p->expn;
p = p->next;
i = 1;
}
cout << endl;
return 0;
}