一元多项式加法

#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;

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值