資料結構與演算法題目集7-2——一元多項式的乘法與加法運算
阿新 • • 發佈:2018-12-05
我的資料結構與演算法題目集程式碼倉: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++解題報告: