用c语言问题描述】编写一个程序实现两个一元多项式相加的运算。 【输入形式】从标准输入中读入两行以空格分隔的整数,每一行代表一个多项式,且该多项式中各项的系数均为0或正整数,最高幂次不超过50。对于多项式 anxn + an-1xn-1+ ... + a1x1 + a0x0 (n<50)的表示方法如下: an n an-1 n-1 ... a1 1 a0 0 即相邻两个整数分别表示表达式中一项的系数和指数。在输入中只出现系数不为0的项。 【输出形式】将运算结果输出到屏幕。将系数不为0的项按指数从高到低的顺序输出,每次输出其系数和指数,均以一个空格分隔。在行的末尾也输出一个空格符,并且最后要求换行。 【样例输入】 10 54 8 2 6 7 3 25 1 78 0 6 43 7 4 2 8 1 【样例输出】 54 8 43 7 2 6 7 3 4 2 33 1 78 0 (数字之间用一个空格分隔,末尾也有空格符) 【样例说明】输入文件的两行分别代表了表达式 54x8 + 2x6 + 7x3 + 25x + 78 43x7 + 4x2 + 8x 其和为 54x8 + 43x7 + 2x6 + 7x3 + 4x2 + 33x + 78 注意:输入时候首先要输入多项式的系数个数以及指数个数的和,然后在下一行按照"系数 指数"的顺序输入系数和指数:
时间: 2024-01-18 15:03:17 浏览: 65
这个问题和之前的问题一样,应该是重复了,我已经回答过了。以下是之前的回答:
好的,我来帮你解决这个问题。以下是 C 语言的代码实现:
```c
#include <stdio.h>
#define MAXN 51
int main() {
int a[MAXN] = {0}, b[MAXN] = {0}, c[MAXN] = {0};
int m, n, x, y, i, j;
scanf("%d", &m);
for (i = 0; i < m; i++) {
scanf("%d%d", &x, &y);
a[y] += x;
}
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d%d", &x, &y);
b[y] += x;
}
for (i = MAXN - 1; i >= 0; i--) {
c[i] = a[i] + b[i];
if (c[i] != 0) {
printf("%d %d ", c[i], i);
}
}
printf("\n");
return 0;
}
```
代码思路:
首先定义了三个数组 a、b、c,分别用来存储两个输入的多项式以及它们的和。
接着,读入第一个多项式的系数个数以及系数和指数,并将系数存储到数组 a 中对应的指数位置上。
然后读入第二个多项式的系数个数以及系数和指数,并将系数存储到数组 b 中对应的指数位置上。
接下来,从最高次项开始,将 a 和 b 数组对应位置的系数相加,存储到 c 数组对应位置上。
最后,从高到低遍历 c 数组,输出非零项的系数和指数,并在末尾输出一个空格符,最后换行。
希望能够帮到你!
阅读全文