原文链接: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;
}