多项式加法

题目内容:

一个多项式可以表达为x的各次幂与系数乘积的和,比如:

2x6+3x5+12x3+6x+20

现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出。

程序要处理的幂最大为100。


输入格式:

总共要输入两个多项式,每个多项式的输入格式如下:

每行输入两个数字,第一个表示幂次,第二个表示该幂次的系数,所有的系数都是整数。第一行一定是最高幂,最后一行一定是0次幂。

注意第一行和最后一行之间不一定按照幂次降低顺序排列;如果某个幂次的系数为0,就不出现在输入数据中了;0次幂的系数为0时还是会出现在输入数据中。


输出格式:

从最高幂开始依次降到0幂,如:

2x6+3x5+12x3-6x+20

注意其中的x是小写字母x,而且所有的符号之间都没有空格,如果某个幂的系数为0则不需要有那项。


输入样例:

6 2

5 3

3 12

1 6

0 20

6 2

5 3

2 12

1 6

0 20


输出样例:

4x6+6x5+12x3+12x2+12x+40

时间限制:500ms 内存限制:32000kb
#include <stdio.h>
//多项式相加

int main()
{
	int polynum[101]={0}; //建立1个数组用于存储多项式,并将其初始化为0 
	int mi,xishu,i,flag=0,k=0;
	for (i=0;i<=1;i++)    //循坏两次输入数据 
	{
		do                    //将数据输入,对应项相加 
		{
			scanf("%d %d",&mi,&xishu);
			polynum[mi]+=xishu; 
		}while(mi);
	}
	for (i=100;i>=0;i--)
	{
		if (flag==1 && polynum[i]>0) //非输出结果第一项,且系数大于0,要输出加号 
		{
			k=1;
			if (polynum[i]>=2)  //系数大于1 
			{
				if (i>=2)
				{
					printf("+%dx%d",polynum[i],i);
				}else if (i==1)
				{
					printf("+%dx",polynum[i]);				
				}else if (i==0)
				{
					printf("+%d",polynum[i]);	
				} 
			}else if (polynum[i]==1) //系数等于1 
			{
				if (i>=2)
				{
					printf("+x%d",i);
				}else if (i==1)
				{
					printf("+x");				
				}else if (i==0)
				{
					printf("+1");	
				} 	
			}	
		}
		else if (flag==0 || polynum[i]<0)  //输出结果第一项或系数小于0,不用输出加号 
		{
			if (polynum[i]<=-2)     //系数小于-1 
			{
				if (i>=2)
				{
					printf("%dx%d",polynum[i],i);
				}else if (i==1)
				{
					printf("%dx",polynum[i]);				
				}else if (i==0)
				{
					printf("%d",polynum[i]);	
				} 
				flag=1;	
			}else if (polynum[i]==-1)   //系数等于-1 
			{
				if (i>=2)
				{
					printf("-x%d",i);
				}else if (i==1)
				{
					printf("-x");				
				}else if (i==0)
				{
					printf("-1");	
				} 
				flag=1; //第一项输出完毕,开关关闭 
				k=1;		
			}else if (polynum[i]>0) //系数大于0 
			{
				if (polynum[i]>=2)
				{
					if (i>=2)
					{
						printf("%dx%d",polynum[i],i);
					}else if (i==1)
					{
						printf("%dx",polynum[i]);				
					}else if (i==0)
					{
						printf("%d",polynum[i]);	
					} 
				}else if (polynum[i]==1)
				{
					if (i>=2)
					{
						printf("x%d",i);
					}else if (i==1)
					{
						printf("x");				
					}else if (i==0)
					{
						printf("1");	
					} 	
				}
				flag=1;	//第一项输出完毕,开关关闭 
				k=1;	
			}	
		}
	}
	if (k==0) printf("0"); //若对应项相加全部为0,即没有项输出,则输出0 
	return 0;
} 

弄了一天终于弄出来了,自己还是太菜了
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值