DS||一元多项式的求和

题目描述
一个一元多项式可以看作由若干个一元单项式按降幂排列成的线性表。请编写程序对输入的两个一元多项式求和,并输出求和的结果。
输入
输入为两个一元多项式,每个一元多项式输入一行,按照降幂依次输入每个单项式的系数和指数,并以-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;	
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值