数据结构与算法题目集7-2——一元多项式的乘法与加法运算

版权声明:我的GitHub:https://github.com/617076674。真诚求星! https://blog.csdn.net/qq_41231926/article/details/84677684

我的数据结构与算法题目集代码仓:https://github.com/617076674/Data-structure-and-algorithm-topic-set

原题链接:https://pintia.cn/problem-sets/15/problems/710

题目描述:

知识点:哈希表

思路:用两个大小为1001的数组分别存储两个输入多项式的系数和指数

本题是PAT-ADVANCED1002——A+B for Polynomials PAT-ADVANCED1009——Product of Polynomials的综合。

用一个大小为2001的数组存储乘积多项式,一个大小为1001的数组存储和多项式。

时间复杂度是O(K1 * K2),其中K1和K2分别是两个输入多项式的项数。空间复杂度是O(1000)。

C++代码:

#include<iostream>

using namespace std;

int nums1[1001], nums2[1001], multiNums[2001], sumNums[1001];

void read(int nums[]);
void print(int nums[], int size);

int main() {
	read(nums1);
	read(nums2);
	fill(multiNums, multiNums + 2001, 0);
	for(int i = 0; i < 1001; i++) {
		for(int j = 0; j < 1001; j++) {
			multiNums[i + j] += nums1[i] * nums2[j];
		}
	}
	print(multiNums, 2001);
	fill(sumNums, sumNums + 1001, 0);
	for(int i = 0; i < 1001; i++) {
		sumNums[i] = nums1[i] + nums2[i];
	}
	print(sumNums, 1001);
	return 0;
}

void read(int nums[]) {
	fill(nums, nums + 1001, 0);
	int K;	//非零项的个数
	scanf("%d", &K);
	int c, e;
	for(int i = 0; i < K; i++) {
		scanf("%d %d", &c, &e);
		nums[e] = c;
	}
}

void print(int nums[], int size) {
	int count = 0;
	for(int i = 0; i < size; i++) {
		if(nums[i] != 0) {
			count++;
		}
	}
	if(count == 0) {
		printf("0 0\n");
	} else {
		bool first = true;
		for(int i = size - 1; i >= 0; i--) {
			if(nums[i] != 0) {
				if(first) {
					first = false;
					printf("%d %d",nums[i], i);
				} else {
					printf(" %d %d",nums[i], i);
				}
			}
		}
		printf("\n");
	}
}

C++解题报告:

扫描二维码关注公众号,回复: 4373540 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_41231926/article/details/84677684
今日推荐