#include<iostream>
using namespace std;
struct ployn {
float coef; //系数
int exp; //指数
ployn* next;
};
//创建多项式
/*
创建带头结点的链表(多项式)
且无论按什么顺序输入,或是有相同指数项
最终在多项式中都是升幂顺序!
*/
void CreatePolyn(ployn*& P, int m)
{
ployn* pre, * paixv, * q, * s;
int i;
P = new ployn;
P->next = NULL;
for (int i = 1; i <= m; i++)
{
paixv = P;
s = new ployn;
cout << "现在输入的是第" << i << "项" << " 共" << m << "项" << endl;
cin >> s->coef >> s->exp;
pre = P;
q = P->next;
while (q && q->exp < s->exp)
{
pre = q;
q = q->next;
}
if (q && q->exp == s->exp)
{
q->coef = s->coef + q->coef;
}
else
{
s->next = q;
pre->next = s;
}
}
}
void PrintPloyn(ployn* P)
{
ployn* p;
p = P->next;
while (p)
{
cout << p->coef << p->exp ;
p = p->next;
if (p != NULL)
cout << "+";
}
cout << endl;
}
void addployn(ployn* ah, ployn* bh, ployn*& ch)//创建并初始化链表CH
{
ch = new ployn;
ch->next = nullptr;
ployn* pa = ah->next, * pb = bh->next, * pc = ch, * s, * qa, * qb;
while (pa != NULL & pb != NULL)
{
//若指数不同,按照指数大小依次将单项式链入链表CH
if (pa->exp < pb->exp)
{
//用尾插法插入链表ch,pc的作用是尾指针
pc->next = pa;
pc = pa;
pa = pa->next;
}
else if(pa->exp > pb->exp)
{
pc->next = pb;
pc = pb;
pb = pb->next;
}
else
{
//指数相同对应的系数想加,若相加为0,则此项消失对应指针向前移
if (pa->coef + pb->coef == 0)
{
qa = pa->next; qb = pb->next;
delete pa;
delete pb;
pa = qa;
pb = qb;
}
else
{
s = new ployn; //创建一个新的节点,存系数之和
s->coef = pa->coef + pb->coef;
s->exp = pa->exp;
pc ->next = s;
pc = s;
qa = pa->next; qb = pb->next;
delete pa;
delete pb;
pa = qa;
pb = qb;
}
}
}
}
int main()
{
ployn* ah, * bh, * ch; //多项式
int L1, L2; //多项式的长度
cout << "请输入第一个多项式的项数:" << endl;
cin >> L1;
CreatePolyn(ah, L1);
PrintPloyn(ah);
cout << "请输入第二个多项式的项数:" << endl;
cin >> L2;
CreatePolyn(bh, L2);
PrintPloyn(bh);
addployn(ah, bh, ch);
PrintPloyn(ch);
return 0;
}
一元多项式加法
最新推荐文章于 2023-04-08 19:20:39 发布