MOOC-C语言入门--第七周作业-多项式加法

题目内容:
一个多项式可以表达为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

以下是我参考别人代码的原链接

#include <stdio.h>
//多项式加法 
//需要考虑系数正负
//系数为1、-1、0的情况 

int main()

{
	int a[101] = {0};  //最高幂次100,加上0次,所以长度定义为101 
	int b[101] = {0};
	int x;   //幂次 
	int y;   //系数
	int max; //最高次幂 
	max = 0;
	//输入第一个多项式 
	scanf("%d %d",&x,&y); 
	max = x;   //第一行必定是最高次幂 
	a[x]+=y;
		
	do{
		scanf("%d %d",&x,&y);  
		a[x]+=y;	//幂次相当于数组下角标,系数相当于数组值	
	}while(x !=0);  //幂次等于输入结束 
	
	//输入第二个多项式 		
	do{
		scanf("%d %d",&x,&y);
		b[x]+=y;
		if(x>max){   //判断第二个多项式的最高次幂是否比第一个大 
			max=x;
		}		
	}while(x !=0);
	
//	int i ;
//	for(i=max;i>0;i--){
//	printf("%d %d\n",i,number[i]);

	int m;    //判断系数是否为第一个幂 
	int n;   //判断是否输出为0 
	m = 1;
	n = 0;
//	printf("%d\n",a[max]+b[max]);
	for(;max>=0;max--){
		//判断第一个系数前面的符号是否为正负 
		if(a[max]+b[max]>0){
			if(m!=1){
				printf("+");
		//让第一个数前不加“+ ” 		
			}
			if(a[max]+b[max]!=1){
				printf("%d",a[max]+b[max]);
		//如果系数不等于1则输出系数 
			}else {
				printf("");
		//如果系数等于1则不输出东西
		//这里调试我很久了 。。	
			}
			if(max > 0){
				printf("x");
		//幂次不等于0则输出x			
			}
		//然后输出幂次 
			if(max > 1){
				printf("%d",max);
			}
				m++;  //让输出+号 
				n++;  //用来统计跳出循环后做是否和为0的判断 
			}else if(a[max]+b[max]<0){  
			// 小于0则需要判断系数是否为-1 
			if(a[max]+b[max]!=-1){
				printf("%d",a[max]+b[max]);
			}else{
				printf("-");
			}
			if(max > 0){
				printf("x");
			}
			if(max > 1){
				printf("%d",max);
			}
				m++;
				n++;
			
			}

		}				
			//用来判断系数和为0,则输出那个0	
			if(n==0){
				printf("0");
			}
			return 0;

	}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值