题目:
请使用顺序表实现两个多项式的加法运算,其中多项式的项按指数从高到低排列。例如3x^2-x+2输入形式为3 2 -1 1 2 0。
测试样例:
样例1:
输入样例:
3 4 2 3 1 2(第一个多项式)
-2 3 4 2 5 1 6 0(第二个多项式)
输出样例:
3 4 5 2 5 1 6 0(求和结果)
样例2:
扫描二维码关注公众号,回复:
13146017 查看本文章
![](/qrcode.jpg)
输入样例:
3 10000 2 1
2 100 -2 1 1 0
输出样例:
3 10000 2 100 1 0
//顺序表实现多项式加法
//author:Mitchell_Donovan
//date:2021.3.9
#include<iostream>
using namespace std;
template<class T>
class arrList {
private:
T* number;
int maxSize;
public:
arrList(const int size) {
maxSize = size;
number = new T[maxSize];
for (int i = 0; i < maxSize; i++) {
number[i] = 0;
}
}
~arrList() {
delete[] number;
}
void print() {
int i = 0;
for (i = maxSize-1; i > 0; i--) {
if (number[i] != 0) {
break;
}
}
if (i == 0) {
cout << "f(x)=0" << endl;
}
else{
cout << "f(x)=" << number[i] << "x^" << i;
for (; i-1 >= 0 ; i--) {
if (number[i-1] != 0) {
cout << " + " << number[i-1] << "x^" << i-1;
}
}
}
}
bool setValue(const T numberValue,const T indexValue);
void add(arrList<T> a, arrList<T> b);
};
template<class T>
bool arrList<T>::setValue(const T numberValue, const T indexValue) {
number[indexValue] += numberValue;
return true;
}
template<class T>
void arrList<T>:: add(arrList<T> a, arrList<T> b) {
for (int i = 0; i < maxSize-1; i++) {
number[i] = a.number[i] + b.number[i];
}
}
int main() {
arrList<int> La(10001), Lb(10001), Lc(10001);
int size;
int number, index;
cout << "请输入第一个多项式的项数:" << endl;
cin >> size;
cout << "请输入各项和其指数:" << endl;
for (int i = 1; i <= size; i++) {
cin >> number >> index;
La.setValue(number, index);
}
cout << "请输入第二个多项式的项数:" << endl;
cin >> size;
cout << "请输入各项和其指数:" << endl;
for (int i = 1; i <= size; i++) {
cin >> number >> index;
Lb.setValue(number, index);
}
Lc.add(La, Lb);
Lc.print();
}