题目链接:https://www.patest.cn/contests/pat-a-practise/1002
题意:给我们两个多项式的每一位的指数和系数,让我们求解两个多项式的和。
题目给出的指数范围是0 ~ 1000,所以我们可以直接定义一个1000大小的数组来存储每一位的系数。最后我们再对每一位进行相加,再遍历一遍这个数组查看非0的位数,并将其打印出来。
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 1005;
const double EPS = 1e-6;
double a[maxn], b[maxn];
int main() {
int k1, k2;
while(scanf("%d", &k1) != EOF) {
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
for(int i=0; i<k1; i++) {
int n;
double m;
scanf("%d%lf", &n, &m);
a[n] = m;
}
scanf("%d", &k2);
for(int i=0; i<k2; i++) {
int n;
double m;
scanf("%d%lf", &n, &m);
b[n] = m;
}
for(int i=0; i<=1000; i++) {
a[i] = a[i] + b[i];
}
int num = 0;
for(int i=1000; i>=0; i--) {
if(abs(a[i] - 0) > EPS) num++;
}
printf("%d", num);
for(int i=1000; i>=0; i--) {
if(abs(a[i] - 0) > EPS) {
printf(" %d %.1lf", i, a[i]);
}
}
printf("\n");
}
}