A1002 A+B for Polynomials
This time, you are supposed to find A+B where A and B are two polynomials.
Input Specification
Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial:
K N1aN1N2aN2 … NkaNk
where K is the number of nonzero terms in the polynomial,Ni and aNi (i=1,2,⋯,K) are the exponents and coefficients, respectively. It is given that 1≤K≤10,0≤Nk< … <N2<N1≤1000.
Output Specification
For each test case you should output the sum of A and B in one line, with the same format as the input. Notice that there must be NO extra space at the end of each line. Please be accurate to 1 decimal place.
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
Code
模拟多项式加法。测试点5一直格式错误
,没找到错误点…
需要注意的是:1、输出末尾不能含空格;2、精确到小数点后1位;3、系数为0的项是不输出的。
关于精确到小数点后一位,用的是: cout.setf(ios::fixed);
+ cout<<setprecision(1)<<sumc[i];
。可以参考setprecision、fixed、showpoint的用法总结。
代码一如既往地写的罗里吧嗦。
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long int expa[1010]={0},expb[1010]={0},sume[1010]={0};
double coea[1010]={0.0},coeb[1010]={0.0},sumc[1010]={0.0};
long long int k1,k2,k3=0,k4=1000,expon,cnt=0;
double coeff;
cin>>k1;
for(int i=0;i<k1;i++)
{
cin>>expon>>coeff;
expa[expon]++;
coea[expon]=coeff;
if(expon>k3)
k3=expon;
if(expon<k4)
k4=expon;
}
cin>>k2;
for(int i=0;i<k2;i++)
{
cin>>expon>>coeff;
if(expon<0)
{
expon = expon;
coeff = coeff;
}
expb[expon]++;
coeb[expon]=coeff;
if(expon>k3)
k3=expon;
if(expon<k4)
k4=expon;
}
for(int i=0;i<k3+1;i++)
{
if(expa[i])
sume[i]++;
if(expb[i])
sume[i]++;
if(sume[i])
sumc[i]=coeb[i]+coea[i];
}
for(int i=k3;i>=0;i--)
if(sume[i] && sumc[i])
cnt++;
if(cnt)
cout<<cnt<<" ";
else
cout<<cnt;
for(int i=k3;i>=0;i--)
{
cout.setf(ios::fixed);
if(sume[i] && sumc[i])
{
cout<<i<<" "<<setprecision(1)<<sumc[i];
if(i != k4)
cout<<" ";
}
}
}