题目描述
一个一元多项式可以看作由若干个一元单项式按降幂排列成的线性表。请编写程序对输入的两个一元多项式求和,并输出求和的结果。
输入
输入为两个一元多项式,每个一元多项式输入一行,按照降幂依次输入每个单项式的系数和指数,并以-1 -1作为结束。系数和指数均为整数,指数不小于0。
输出
输出为求和结果多项式,按照降幂依次输出每个单项的系数和指数,每个数值后面用一个空格隔开,输出结果多项式后换行。 系数为0的单项式不得输出——除非结果多项式就是0,则直接输出0。
样例输入 Copy
2 7 3 5 12 1 6 0 -1 -1
7 5 9 4 3 0 -1 -1
样例输出 Copy
2 7 10 5 9 4 12 1 9 0
#include "stdio.h"
int main(int argc, char* argv[])
{
int flag=0,s1[9999],s2[9999]={0},s3[9999]={0},i,j,k=0,n1=0,n2=0,num;
for(i=0;i>=0;i=i+2)
{
scanf("%d %d",&s1[i],&s1[i+1]);
n1=n1+1;
if(s1[i]==-1&&s1[i+1]==-1)
break;
}
for(i=0;i>=0;i=i+2)
{
scanf("%d %d",&s2[i],&s2[i+1]);
n2=n2+1;
if(s2[i]==-1&&s2[i+1]==-1)
break;
}
if(n1>=n2)
{
for(i=1,j=1;i<2*n1-2;)
{
if(s1[i]>s2[j])
{
s3[k]=s1[i-1];
s3[k+1]=s1[i];
k=k+2;
i=i+2;
}
else if(s1[i]==s2[j])
{
s3[k]=s1[i-1]+s2[j-1];
s3[k+1]=s1[i];
k=k+2;
i=i+2;
j=j+2;
}
else
{
s3[k]=s2[j-1];
s3[k+1]=s2[j];
k=k+2;
j=j+2;
}
}
}
else
{
for(j=1,i=1;j<2*n2-2;)
{
if(s2[j]>s1[i])
{
s3[k]=s2[j-1];
s3[k+1]=s2[j];
k=k+2;
j=j+2;
}
else if(s2[j]==s1[i])
{
s3[k]=s2[j-1]+s1[i-1];
s3[k+1]=s2[j];
k=k+2;
j=j+2;
i=i+2;
}
else
{
s3[k]=s1[i-1];
s3[k+1]=s1[i];
k=k+2;
i=i+2;
}
}
}
num=k;
for(k=0;k<num;k=k+2)
{
if(s3[k]!=0)
{printf("%d %d ",s3[k],s3[k+1]);
flag=1;}
}
if(flag==0)
printf("0");
printf("\n");
return 0;
}