多项式加法(5分)

这篇博客介绍了如何用C语言进行多项式加法的程序设计。作者通过code1和code2展示了实现过程,并在总结中详细阐述了不同幂次和系数的情况,特别提到了在处理幂次为1和0时的特殊情况。在code2中,代码进行了简化,将符号判断和系数输出分开处理。
摘要由CSDN通过智能技术生成

程序设计入门——C语言_中国大学MOOC(慕课) (icourse163.org)

code1:

#include<stdio.h>
#include<string.h>

int main(){
	int a[101]={0};
	int i,mi=0,xi,cnt=0,max=0,nax=0,flag=0;
	while(1){
		scanf("%d %d",&mi,&xi);
		a[mi]+=xi;
		if(max<mi) max=mi;
		if(mi==0){
			cnt++;
			if(cnt==2){
				break;
			}
		}
	}
	for(i=max;i>=0;i--){         
		if(a[i]!=0&&nax<i) {
			nax=i;
		}
	}

	for(i=nax;i>=0;i--){
		if(a[i]!=0){
			flag=1;
			if(i==nax){
				if(a[i]==1||a[i]==-1){
					if(i==0) printf("%d",a[i]);
					else if(i==1) {
						if(a[i]==1) printf("x");
						if(a[i]==-1) printf("-x");
					}
					else{
						if(a[i]==1) printf("x%d",i);
						if(a[i]==-1) printf("-x%d",i);
					} 
				} 
				else{
					if(i==0) printf("%d",a[i]);
					else if(i==1) printf("%dx",a[i]);
					else printf("%dx%d",a[i],i);
				}
			} 
			else if(i==0) printf("%+d",a[i]);
			else if(i==1){
				if(a[i]==1) printf("+x");
				else if(a[i]==-1) printf("-x");
				else printf("%+dx",a[i]);
			}
			else{
				if(a[i]==1) printf("+x%d",i);
				else if(a[i]==-1) printf("-x%d",i);
				else printf("%+dx%d",a[i],i);
			} 
		}
	}
	if(flag==0) printf("0");
	return 0;
}

code2: 

#include<stdio.h>
#include<string.h>
#include<math.h>
int main(){
	int a[101]={0};
	int i,mi=0,xi,cnt=0,max=0,nax=0,flag=0;
	while(1){
		scanf("%d %d",&mi,&xi);
		a[mi]+=xi;
		if(max<mi) max=mi;
		if(mi==0){
			cnt++;
			if(cnt==2){
				break;
			}
		}
	}
	for(i=max;i>=0;i--){         
		if(a[i]!=0&&nax<i) {
			nax=i;
		}
	}
	cnt=0;
	for(i=nax;i>=0;i--){
		if(a[i]!=0){
			flag=1;
			if(a[i]<0) printf("-");	
			if(a[i]>0&&cnt) printf("+");	
			
			if(i==0) {
				printf("%d",abs(a[i]));
				cnt++;
			}
			if(i==1&&abs(a[i])==1){
				printf("x");
				cnt++;
			}
			if(i==1&&abs(a[i])!=1){
				printf("%dx",abs(a[i]));
				cnt++;
			}
			if(i!=0&&i!=1&&abs(a[i])==1){
				printf("x%d",i);
				cnt++;
			}
			if(i!=0&&i!=1&&abs(a[i])!=1){
				printf("%dx%d",abs(a[i]),i);
				cnt++;
			}
		}
	}
	if(flag==0) printf("0");
	return 0;
}

总结:

code1

吐槽一下题目,没有交代清楚幂次为1的时候是否还输出幂次(虽然例子里显示没有),也没有说明当系数为1的时候是否输出系数(应该是不输出),耽误时间……

当幂次最大的时候(正系数前不加+号),考虑①系数为1或-1②其他(如3x2)。其中①又考虑三种情况:幂次为0(如1或-1),幂次为1或-1(如x或-x),其他(x3或-x3);其中②也要相应考虑这三种情况。

当幂次为1的时候,考虑两种情况:①系数为1或-1②其他。

当幂次为0的时候,直接输出系数

其他情况(幂次不为最大,0或1),最普通情况。

总之要考虑,幂次和系数的各种不同情况

code2

把code1简化了一下:把符号的判断单独提取出来,后面都输出系数的绝对值;其他的一共有5种情况(a为常数):a,x,ax,xa,axa;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值