PAT-甲级-1002 A+B for Polynomials

原文链接:PAT-甲级-1002

题目大意:

给两个多项式,每个多项式有K个项。每项由指数和系数构成。计算两个多个多项式的和,并按输入格式输出。

解题思路:

由于指数0<=N<=1000,所以可以使用一个数组存储多项式的项,下标作为指数,值为系数。这样读入两个多项式并相加就可以得到结果多项式,然后将数组中值不为0的个数统计,就是结果多项式的项数,然后输出。应该注意的是使用double进行存储的时候可能会出现误差,判断时候不为0的时候应该注意不能直接与0相比。
一开始我用了set来存指数,不用遍历数组,但是总是部分正确,很迷。

代码:

#include<iostream>
#include<cmath>
#include<cstdio>

using namespace std;

const int MAXN = 1000 + 5;
const double esp = 0.04;

double ans[MAXN] = { 0 };

void input()
{
  int num, ex;
  double co;
  cin >> num;
  while (num--) {
    cin >> ex >> co;
    ans[ex] += co;
  }
}

int main()
{  
  input();
  input();
  int cnt = 0;
  for (int i = 0; i < MAXN; i++) {
    if (fabs(ans[i]) > esp) cnt++;
  }
  printf("%d", cnt);
  for (int i = 1000; i >= 0; i--) {
    if (fabs(ans[i]) > esp)  printf(" %d %0.1lf", i, ans[i]);
  }
  printf("\n");
  return 0;
}
点赞