编写一个c++程序实现两个一元多项式相乘。 【输入形式】 首先输入第一个多项式中系数不为0的项的个数,然后在新的一行上输入以空格分隔的整数,代表一个多项式,且该多项式中各项的系数均为0或正整数,最高幂次不超过50。对于多项式 anxn + an-1xn-1+ ... + a1x1 + a0x0 (n<50)的输入方法如下: an n an-1 n-1 ... a1 1 a0 0 即相邻两个整数分别表示表达式中一项的系数和指数。在输入中只出现系数不为0的项。 按照上述方式再输入第二个多项式。 【输出形式】 将运算结果输出到屏幕。将系数不为0的项按指数从高到低的顺序输出,每次输出其系数和指数,均以一个空格分隔。最后要求换行。
时间: 2023-12-03 08:46:06 浏览: 112
C C++程序设计 求两个一元多项式相乘的算法.txt
以下是实现该功能的C++程序:
```cpp
#include <iostream>
using namespace std;
const int MAXN = 55;
int main()
{
int n1, n2, a1[MAXN] = {0}, a2[MAXN] = {0}, ans[MAXN * 2] = {0};
// 输入第一个多项式
cin >> n1;
for (int i = 0; i < n1; i++) {
int a, b;
cin >> a >> b;
a1[b] = a;
}
// 输入第二个多项式
cin >> n2;
for (int i = 0; i < n2; i++) {
int a, b;
cin >> a >> b;
a2[b] = a;
}
// 计算两个多项式的乘积
for (int i = 0; i < MAXN; i++) {
for (int j = 0; j < MAXN; j++) {
ans[i + j] += a1[i] * a2[j];
}
}
// 输出结果
bool first = true; // 用于判断是否输出空格
for (int i = MAXN * 2 - 1; i >= 0; i--) {
if (ans[i] != 0) {
if (!first) cout << " ";
cout << ans[i] << " " << i;
first = false;
}
}
cout << endl;
return 0;
}
```
该程序首先声明了3个数组,`a1`、`a2`和`ans`,分别用来存储两个输入的多项式以及两个多项式的乘积。数组`ans`的长度必须是两个输入多项式最高次数之和,这里取了`MAXN * 2`。
接下来,程序按照题目要求输入两个多项式,并且将每一项的系数存储在对应的数组元素中。这里使用了一个技巧,即将每一项的系数存储在指数对应的数组元素中,这样就可以直接通过数组下标来访问每一项的系数,而不需要使用链表等其他数据结构。
接下来,程序使用两层循环遍历两个多项式的每一项,并且将对应项的系数相乘并加到`ans`数组中。最后,程序再次遍历`ans`数组,并且将系数不为0的项按指数从高到低的顺序输出到屏幕上。
需要注意的是,如果某一项的系数为0,则不需要输出该项。程序使用了一个`first`变量来判断是否输出空格。如果是第一个输出的项,则不需要输出空格,否则需要在该项前输出一个空格。最后,输出一个换行符以结束程序。
阅读全文