title: "7-2一元多項式的乘法與加法運算(20"
date: 2018-06-14T01:09:46+08:00
tags: [""]
categories: ["PTA"]c++
7-2 一元多項式的乘法與加法運算(20 分)
設計函數分別求兩個一元多項式的乘積與和。函數
輸入格式:
輸入分2行,每行分別先給出多項式非零項的個數,再以指數遞降方式輸入一個多項式非零項係數和指數(絕對值均爲不超過1000的整數)。數字間以空格分隔。spa
輸出格式:
輸出分2行,分別以指數遞降方式輸出乘積多項式以及和多項式非零項的係數和指數。數字間以空格分隔,但結尾不能有多餘空格。零多項式應輸出0 0。設計
輸入樣例:
4 3 4 -5 2 6 1 -2 0
3 5 20 -7 4 3 1
輸出樣例:
15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
5 20 -4 4 -5 2 9 1 -2 0code
#include <bits/stdc++.h> using namespace std; int main() { vector<pair<int, int>> a, b; int an, bn, i; cin >> an; pair<int, int> t; for(i = 0; i < an; i++) { cin >> t.second;//係數 cin >> t.first;//指數 a.emplace_back(t); } cin >> bn; for(i = 0; i < bn; i++) { cin >> t.second; cin >> t.first; b.emplace_back(t); } //計算乘法 map<int, int> m2; for(auto va : a) { for(auto vb : b) { m2[va.first + vb.first] += (va.second * vb.second); } } bool b2 = false; for(auto m = m2.rbegin(); m != m2.rend()--; m++) { if((*m).second != 0) { if(b2 == false) { cout << (*m).second << ' ' << (*m).first; b2 = true; } else { cout << ' ' << (*m).second << ' ' << (*m).first; } } } if(!b2) { cout << "0 0"; } cout << endl; //計算加法 map<int, int> m1; //默認爲0 for(auto v : a) { m1[v.first] += v.second; } for(auto v : b) { m1[v.first] += v.second; } bool b1 = false; for(auto m = m1.rbegin(); m != m1.rend(); m++) { if((*m).second != 0) { if(b1 == false) { cout << (*m).second << ' ' << (*m).first; b1 = true; } else { cout << ' ' << (*m).second << ' ' << (*m).first; } } } if(!b1) { cout << "0 0"; } return 0; }