题目链接: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"); } }