题目
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 N1 aN1 N2 aN2 … NK aNK
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
易错点
- 如果最后的结果没有非零项,那么要输出且只输出一个0。(我一开始输出了三个0,导致测试点6一直出错);
- 如果某两项的系数和为0,则不应输出。
代码
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
double A[3000],B[3000],C[3000];
int K1,K2; //1≤K≤10
int count=0;
scanf("%d",&K1); //第一个多项式
for(int i=0;i<2*K1;i++)
scanf("%lf",&A[i]);
scanf("%d",&K2); //第二个多项式
for(int i=0;i<2*K2;i++)
scanf("%lf",&B[i]);
int a=0,b=0,c=0;
while(a<2*K1&&b<2*K2)
{
if(A[a]>B[b])
{
C[c++]=A[a++];
C[c++]=A[a++];
}
else if(A[a]<B[b])
{
C[c++]=B[b++];
C[c++]=B[b++];
}
else
{
if(A[a+1]+B[b+1]!=0)
{
C[c++]=A[a];
C[c++]=A[a+1]+B[b+1];
}
a=a+2;
b=b+2;
}
}
while(a<2*K1)
{
C[c++]=A[a++];
C[c++]=A[a++];
}
while(b<2*K2)
{
C[c++]=B[b++];
C[c++]=B[b++];
}
for(int i=1;i<c;i=i+2) //防止截断尾数时出现-0.000的情况,其实不用考虑,因为如果为0直接跳过
{ //而且测试点也没有考查
if(C[i]<0&&fabs(C[i])<0.1)
C[i]=0;
else
count++;
}
printf("%d",count);
if(count==0)
return 0;
else
{
printf(" ");
for(int i=0;i<c;i=i+2)
{
if(C[i+1]!=0) //浮点数最好用C[i+1]小于某个值
{
printf("%.0lf %.1lf",C[i],C[i+1]);
if(i!=c-2)
printf(" ");
}
}
}
return 0;
}