【问题描述】 编写一个程序实现两个一元多项式相乘。 【输入形式】 首先输入第一个多项式中系数不为0的项的个数,然后在新的一行上输入以空格分隔的整数,代表一个多项式,且该多项式中各项的系数均为0或正整数,最高幂次不超过50。对于多项式 anxn + an-1xn-1+ ... + a1x1 + a0x0 (n<50)的输入方法如下: an n an-1 n-1 ... a1 1 a0 0 即相邻两个整数分别表示表达式中一项的系数和指数。在输入中只出现系数不为0的项。 按照上述方式再输入第二个多项式。 【输出形式】 将运算结果输出到屏幕。将系数不为0的项按指数从高到低的顺序输出,每次输出其系数和指数,均以一个空格分隔。最后要求换行。 【样例输入】 5 10 8 2 6 7 3 5 1 18 0 3 3 7 5 2 8 1 【样例输出】 30 15 6 13 71 10 80 9 25 8 70 7 35 5 56 4 25 3 130 2 144 1 【样例说明】 输入的两行分别代表如下表达式: 10x8 + 2x6 + 7x3 + 5x + 18 3x7 + 5x2 + 8x 相乘结果为: 30x15 + 6x13 + 71x10 + 80x9 + 25x8 + 70x7 + 35x5 + 56x4 + 25x3 + 130x2 + 144x。用c语言编写
时间: 2023-12-03 11:46:46 浏览: 198
一元多项式乘法,功能: 完成两个n元多项式作乘法,给出明确的等式形式。
4星 · 用户满意度95%
```c
#include<stdio.h>
#include<string.h>
#define MAX_N 55
struct Poly {
int a[MAX_N];
}A, B, C;
int main() {
int m, n;
memset(A.a, 0, sizeof(A.a));
memset(B.a, 0, sizeof(B.a));
memset(C.a, 0, sizeof(C.a));
scanf("%d", &m);
for (int i = 0; i < m; i++) {
int coe, exp;
scanf("%d %d", &coe, &exp);
A.a[exp] = coe;
}
scanf("%d", &n);
for (int i = 0; i < n; i++) {
int coe, exp;
scanf("%d %d", &coe, &exp);
B.a[exp] = coe;
}
for (int i = 0; i < MAX_N; i++) {
for (int j = 0; j < MAX_N; j++) {
C.a[i + j] += A.a[i] * B.a[j];
}
}
int flag = 0;
for (int i = MAX_N - 1; i >= 0; i--) {
if (C.a[i]) {
if (flag) printf(" ");
printf("%d %d", C.a[i], i);
flag = 1;
}
}
printf("\n");
return 0;
}
```
阅读全文