一元多项式求和:把任意给定的两个一元多项式P(x) ,Q(x) 输入计算机,计算它们的和并输出计算结果。

一元多项式求和:把任意给定的两个一元多项式P(x) ,Q(x) 输入计算机,计算它们的和并输出计算结果。

#源代码

#include<iostream>
#define MAXSIZE 50
using namespace std;
typedef struct LNode
{
	float coef;
	int exp;
	struct LNode *next;
}LinkNode;
//初始化链表
//void  InitList(LinkNode*& L)
//{
//	L = (LinkNode*)malloc(sizeof(LinkNode));KC
//	L->next = NULL;
//}
//多项式和
LinkNode* Add(LinkNode* p, LinkNode* q)
{
	float sum;
	LinkNode* L, * s, * r;
	p = p->next;
	q = q->next;
	L= (LinkNode*)malloc(sizeof(LinkNode));
	r = L;
	while (p != NULL && q != NULL)
	{
		if (p->exp > q->exp)
		{
			s= (LinkNode*)malloc(sizeof(LinkNode));
			s->coef = p->coef;
			s->exp = p->exp;
			r->next = s;
			r = s;
			p = p->next;//下次比较的时候p->exp就比以前的小
		}
		else if (p->exp == q->exp)
		{
			s= (LinkNode*)malloc(sizeof(LinkNode));
			s->coef = p->coef + q->coef;
			s->exp = p->exp;
			if (s->coef == 0)free(s);
			else
			{
				r->next = s;
				r = s;//重置r位置
			}
			p = p->next;
			q = q->next;//两个都往后移一位
		}
		else//p->exp<q->exp情况
		{
			s= (LinkNode*)malloc(sizeof(LinkNode));
			s->coef = q->coef;
			s->exp = q->exp;
			r->next = s;
			r = s;//让r指向下一位
			q = q->next;
		}
	}
	if (p != NULL)
		r->next = p;//把p给r
	else if (q != NULL)
		r->next = q;//把q给r
	else
		r->next = NULL;
	return L;
}

//创建链表
void CreateList(LinkNode*& L)
{
	float c=1;
	int e;
	L = (LinkNode*)malloc(sizeof(LinkNode));
	L->next = NULL;
	LinkNode* s, * r;
	r = L;
	cout << "请输入多项式的系数和指数(按0结束输入)" << endl;
	cin >> c >> e;
	while (c)
	{
		s= (LinkNode*)malloc(sizeof(LinkNode));
		s->coef = c;
		s->exp = e;
		r->next = s; 
		r = s;
		cin >> c >> e; //尾插法
	}
	r->next = NULL;
}
//显示多项式
void Print(LinkNode* L)
{
	while (L->next!=NULL)
	{
		L = L->next;
		cout << L->coef << "X^" << L->exp;
		if (L->next != NULL && L->next->coef > 0)//下一项有系数
			cout << "+";
	}
}
//bool ListEmpty(LinkNode* L)
//{
//	if (L->next == NULL)
//		return 0;
//}
void ListDelete(LinkNode*L)
{
	LinkNode* p, * q;
	p = L->next;
	while (p)
	{
		q = p;
		p = p->next;
		delete q;
	}
	L->next = NULL;
}
void main()
{
	int c;
	int a = 1;
	while (a)
	{
		cout << endl;
		cout << "*********************菜单************************" << endl;
		cout << "1.创建并显示一元多项式A和B,计算A和B的和并显示" << endl;
		cout << "2.退出程序" << endl;
		cout << "输入要执行的选项" << endl;
		cin >> c;
		switch (c)
		{
		case 1: {LinkNode* p, * q;
			CreateList(p);
			cout << "一元多项式A是:"<<endl;
			Print(p);
			CreateList(q);
			cout << "一元多项式B是:"<<endl;
			Print(q);
			LinkNode* L = Add(p, q);
			cout << "最后的多项式为:" << endl;
			Print(L);
			ListDelete(L);
		}
			break;
		case 2:a = 0;
			break;
		}
	}
	system("pause");

}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XGY_Zerone

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值