题目来源:PAT(甲级)1002 A+B for Polynomials (25 分)
题目描述:
Sample Input:
2 1 2.4 0 3.2
2 2 1.5 1 0.5
Sample Output:
3 2 1.5 1 2.9 0 3.2
题目翻译:
1002.多项式A与B的和
假设A和B是两个多项式,求A与B的和多项式。
输入
每个输入文件包含一个测试实例。每个实例有两行,每行包含一个多项式的信息: K N1 aN1 N2 aN2 … NK aNK,其中K为多项式中非0项的个数,Ni 和 aNi (i=1, 2, …, K) 分别为指数和系数。数的范围是1 <= K <= 10,0<= NK < … < N2 < N1 <=1000。
输出
对于每个测试实例,你需要在一行内输出A与B的和,格式与输入时相同。注意每行的结尾不能有多余的空格。小数精确到一位。
注意事项:
- 按照指数从高到低输出
- 系数为0时不进行输出(实际情况为该项不存在)
- 输出的系数保留一位小数
#include<iostream>
#include<map>
using namespace std;
map<int, double>cal;
map<int, double>::iterator it=cal.begin();
map<int, double>::reverse_iterator rit;
int main()
{
for (int i = 0;i < 2;i++)
{
int k, n;
double an;
cin >> k;
for (int j = 0;j < k;j++)
{
cin >> n >> an;
it = cal.find(n);
if (it != cal.end())
{
it->second = it->second + an;
}
else
cal.insert(make_pair(n, an));
}
}
it = cal.begin();
while(it != cal.end())
{
if (it->second == 0.0&&it->second == -0.0)
cal.erase(it++);
else
it++;
}
int len = cal.size();
cout << len;
for (rit = cal.rbegin();rit != cal.rend();rit++)
{
printf(" %d %.1f", rit->first, rit->second);
}
cout << endl;
return 0;
}