一元多项式的乘法与加法运算

一元多项式的乘法与加法运算

题目

链表实现

初始化输入


#include<iostream>
#include<cstdio>
using namespace std;

#define ElementType int
typedef struct PolyNode *PtrToPloyNode;
struct PolyNode
{
	ElementType coef;
	ElementType expon;
	PtrToPloyNode link;
};
typedef PtrToPloyNode Polynomial;
Polynomial Polynomial1, Polynomial2;


void input()
{
	int N;
	ElementType CinTmp;
	Polynomial NodeTmp,rear;

	cin >> N;
	rear = (PtrToPloyNode)malloc(sizeof(struct PolyNode));
	cin >> CinTmp;
	rear->coef = CinTmp;
	cin >> CinTmp;
	rear->expon = CinTmp;
	Polynomial1 = rear;
	for (size_t i = 0; i < N - 1; i++)
	{
		NodeTmp = (PtrToPloyNode)malloc(sizeof(struct PolyNode));
		cin >> CinTmp;
		NodeTmp->coef = CinTmp;
		cin >> CinTmp;
		NodeTmp->expon = CinTmp;
		rear->link = NodeTmp;
		rear = NodeTmp;
	}

	

	cin >> N;
	rear = (PtrToPloyNode)malloc(sizeof(struct PolyNode));
	cin >> CinTmp;
	rear->coef = CinTmp;
	cin >> CinTmp;
	rear->expon = CinTmp;
	Polynomial2 = rear;
	for (size_t i = 0; i < N - 1; i++)
	{
		NodeTmp = (PtrToPloyNode)malloc(sizeof(struct PolyNode));
		cin >> CinTmp;
		NodeTmp->coef = CinTmp;
		cin >> CinTmp;
		NodeTmp->expon = CinTmp;
		rear->link = NodeTmp;
		rear = NodeTmp;
	}
}

主程序

int main()
{

	Polynomial Polynomial1, Polynomial2;
	input(&Polynomial1, &Polynomial2);
	Polynomial result = PolyAdd(Polynomial1, Polynomial2);
	output(result);


	return 0;
}

未AC全部代码

明天AC


#include<iostream>
#include<cstdio>
using namespace std;

#define ElementType int
typedef struct PolyNode *PtrToPloyNode;
struct PolyNode
{
	ElementType coef;
	ElementType expon;
	PtrToPloyNode link;
};
typedef PtrToPloyNode Polynomial;


void input(Polynomial *Polynomial1, Polynomial *Polynomial2)//无头节点
{
	int N;
	ElementType CinTmp;
	Polynomial NodeTmp,rear;

	cin >> N;
	rear = (PtrToPloyNode)malloc(sizeof(struct PolyNode));
	cin >> CinTmp;
	rear->coef = CinTmp;
	cin >> CinTmp;
	rear->expon = CinTmp;
	*Polynomial1 = rear;
	for (size_t i = 0; i < N - 1; i++)
	{
		NodeTmp = (PtrToPloyNode)malloc(sizeof(struct PolyNode));
		cin >> CinTmp;
		NodeTmp->coef = CinTmp;
		cin >> CinTmp;
		NodeTmp->expon = CinTmp;
		rear->link = NodeTmp;
		rear = NodeTmp;
	}

	rear->link = NULL;
	

	cin >> N;
	rear = (PtrToPloyNode)malloc(sizeof(struct PolyNode));
	cin >> CinTmp;
	rear->coef = CinTmp;
	cin >> CinTmp;
	rear->expon = CinTmp;
	*Polynomial2 = rear;
	for (size_t i = 0; i < N - 1; i++)
	{
		NodeTmp = (PtrToPloyNode)malloc(sizeof(struct PolyNode));
		cin >> CinTmp;
		NodeTmp->coef = CinTmp;
		cin >> CinTmp;
		NodeTmp->expon = CinTmp;
		rear->link = NodeTmp;
		rear = NodeTmp;
	}
	rear->link = NULL;
}


int Compare(int e1, int e2)
{
	if (e1 == e2) return 0;
	if (e1 > e2) return 1;
	if (e1 < e2) return -1;
}

void Attach(int coef, int expon, Polynomial * PrtRear)
{
	Polynomial TempNode = (Polynomial)malloc(sizeof(struct PolyNode));
	TempNode->coef = coef;
	TempNode->expon = expon;

	(*PrtRear)->link = TempNode;
	(*PrtRear) = TempNode;
}

Polynomial PolyAdd(Polynomial P1, Polynomial P2)
{
	Polynomial front, rear, temp;
	int sum;

	rear = (Polynomial)malloc(sizeof(struct PolyNode));
	front = rear;

	while (P1 && P2)
	{
		switch (Compare(P1->expon,P2->expon))
		{
		case 1://P1指数比较大
			Attach(P1->coef, P1->expon, &rear);
			P1 = P1->link;
			break;
		case -1://P2指数比较大
			Attach(P2->coef,P2->expon,&rear);
			P2 = P2->link;
			break;

		case 0://P1 P2指数相同
			sum = P1->coef + P2->coef;
			if (sum)
			{
				Attach(sum, P2->expon,&rear);
			}
			P1 = P1->link;
			P2 = P2->link;
		break;

		default:
			break;
		}
	}
	for (; P1; P1 = P1->link)Attach(P1->coef,P1->expon,&rear);
	for (; P2; P2 = P2->link)Attach(P2->coef, P2->expon, &rear);
	rear->link = NULL;
	temp = front;
	front = front->link;
	free(temp);

	return front;
}

void output(Polynomial result)
{
	//result = result->link;
	if (result == NULL)
	{
		cout << '0 0';
	}

	while (result)
	{
		cout << (result)->coef << ' ' << (result)->expon;
		if ((result)->link) cout << ' ';
		result = result->link;
	}
}


Polynomial PolyMulti(Polynomial Polynomial1, Polynomial Polynomial2)
{
	Polynomial result;
	Polynomial temp, front;

	temp = (Polynomial)malloc(sizeof(struct PolyNode));
	temp->link = NULL;


	result = (Polynomial)malloc(sizeof(struct PolyNode));
	result = NULL;


	for(;Polynomial1;Polynomial1= Polynomial1->link)
	{
		front = Polynomial2;
		for(; front; front = front->link)
		{
			temp->coef = Polynomial1->coef * front->coef;
			temp->expon = Polynomial1->expon + front->expon;
			result = PolyAdd(temp,result);
		}
	}
	free(temp);
	return result;
}

int main()
{

	Polynomial Polynomial1, Polynomial2;
	input(&Polynomial1, &Polynomial2);

	Polynomial result1 = PolyMulti(Polynomial1, Polynomial2);
	output(result1);
	cout << endl;

	Polynomial result2 = PolyAdd(Polynomial1, Polynomial2);
	output(result2);


	return 0;
}
世界地图矢量数据可以通过多种网站进行下载。以下是一些提供免费下载世界地图矢量数据的网站: 1. Open Street Map (https://www.openstreetmap.org/): 这个网站可以根据输入的经纬度或手动选定范围来导出目标区域的矢量图。导出的数据格式为osm格式,但只支持矩形范围的地图下载。 2. Geofabrik (http://download.geofabrik.de/): Geofabrik提供按洲际和国家快速下载全国范围的地图数据数据格式支持shape文件格式,包含多个独立图层,如道路、建筑、水域、交通、土地利用分类、自然景观等。数据每天更新一次。 3. bbbike (https://download.bbbike.org/osm/): bbbike提供全球主要的200多个城市的地图数据下载,也可以按照bbox进行下载。该网站还提供全球数据数据格式种类齐全,包括geojson、shp等。 4. GADM (https://gadm.org/index.html): GADM提供按国家或全球下载地图数据的服务。该网站提供多种格式的数据下载。 5. L7 AntV (https://l7.antv.antgroup.com/custom/tools/worldmap): L7 AntV是一个提供标准世界地图矢量数据免费下载的网站。支持多种数据格式下载,包括GeoJSON、KML、JSON、TopJSON、CSV和高清SVG格式等。可以下载中国省、市、县的矢量边界和世界各个国家的矢量边界数据。 以上这些网站都提供了世界地图矢量数据免费下载服务,你可以根据自己的需求选择合适的网站进行下载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值