本文主要是介绍题记(46)--两个多项式的和,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
一、题目内容
二、输入描述
三、输出描述
四、输入输出示例
五、完整C语言代码
一、题目内容
输入两个多项式,计算它们的和。 每个多项式有若干对整数表示,每组整数中,第一个整数表示系数(非0),第二个整数表示该项的次数。 如由3 3 5 -2 1 4 0表示3x^5 - 2 * x + 4其中第一个3表示该多项式由三个整数对表示。
二、输入描述
输入为两行,分别表示两个多项式。表示每项的整数对按照次数大小降序给出。(次数绝对值小于1000,系数绝对值小于10000)
三、输出描述
按照降次顺序输出表示和多项式的整数对(系数为0的整数对不用输出,整数对由空格分隔,最后一个整数对后不添加空格)
四、输入输出示例
输入:
3 3 5 -2 1 4 0 4 2 3 -1 2 1 1 3 0输出:
3 5 2 3 -1 2 -1 1 7 0
五、完整C语言代码
AC代码~#include<stdio.h>
#include<stdlib.h>
typedef struct number {int a;int b;
} num;int main() {int m, n;scanf("%d", &m);num* A = (num*)malloc(m * sizeof(num));for (int i = 0; i < m; i++)scanf("%d%d", &A[i].a, &A[i].b);scanf("%d", &n);num* B = (num*)malloc(n * sizeof(num));for (int i = 0; i < n; i++)scanf("%d%d", &B[i].a, &B[i].b);num* ans = (num*)malloc((m + n + 1) * sizeof(num));int i, j, k;i = j = k = 0;while (i < m && j < n) {if (A[i].b > B[j].b) {ans[k++] = A[i];i++;} else if (A[i].b < B[j].b) {ans[k++] = B[j];j++;} else {ans[k].b = A[i].b;ans[k].a = A[i].a + B[j].a;k++;i++;j++;}}while (i < m) {ans[k++] = A[i];i++;}while (j < n) {ans[k++] = B[j];j++;}for (i = 0; i < k - 1; i++)if (ans[i].a != 0)printf("%d %d ", ans[i].a, ans[i].b);if (ans[k - 1].a != 0)printf("%d %d\n", ans[k - 1].a, ans[k - 1].b);return 0;
}
这篇关于题记(46)--两个多项式的和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!