[问题描述] 编写一个程序实现两个一元多项式相乘。 [输入形式]首先输入第一个多项式中系数不为0的项的个数,然后在新的一行上输入以空格分隔的整数,代表-一个多项式,且该多项式中各项的系数均为0或正整数,最高夏次不超过50.对于多项式anx^+ an-1x-+..+a1x + agx (nS50) 的输入方法如下:an n an-1 n-1.. 211 ao 0 即相邻两个整数分别表示表达式中一项的系数和指数。在输入中只出现系数不为0的项。 按照上述方式再输入第二个多项式。 [输出形式] 将运算结果输出到屏班。将系数不为0的项按指数从高到低的顺序输出,每次输出其系数和指数,均以一个空格分隔。最后要求换行。
时间: 2024-03-06 08:50:12 浏览: 93
以下是C++代码实现:
```cpp
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 55;
struct Polynomial {
int coef[MAXN]; // 存储各项系数的数组
};
Polynomial multiply(Polynomial a, Polynomial b) {
Polynomial c;
memset(c.coef, 0, sizeof(c.coef)); // 初始化c中各项系数为0
for (int i = 0; i < MAXN; i++) {
for (int j = 0; j < MAXN; j++) {
c.coef[i + j] += a.coef[i] * b.coef[j]; // 将a、b中对应项相乘并累加到c中
}
}
return c;
}
int main() {
Polynomial a, b, c;
int n, m;
cin >> n;
for (int i = 0; i < n; i++) {
int coef, exp;
cin >> coef >> exp;
a.coef[exp] = coef; // 将系数为coef、指数为exp的项添加到a中
}
cin >> m;
for (int i = 0; i < m; i++) {
int coef, exp;
cin >> coef >> exp;
b.coef[exp] = coef; // 将系数为coef、指数为exp的项添加到b中
}
c = multiply(a, b); // 计算结果
bool first = true; // 用于控制输出格式
for (int i = MAXN - 1; i >= 0; i--) {
if (c.coef[i] != 0) {
if (!first) cout << ' '; // 输出项之间的空格
first = false;
cout << c.coef[i] << ' ' << i; // 输出系数和指数
}
}
cout << endl;
return 0;
}
```
输入示例:
```
3
2 2 3 1 4 0
2
-1 1 1 0
```
输出示例:
```
-8 3 11 2 -10 1
```
阅读全文