1. 程式人生 > >資料結構與演算法題目集7-2——一元多項式的乘法與加法運算

資料結構與演算法題目集7-2——一元多項式的乘法與加法運算

我的資料結構與演算法題目集程式碼倉: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++解題報告: