第七章 多项式加法(简单模拟)C语言程序设计-翁恺

本文分享了一段解决翁恺老师C语言课程中数组编程题的代码,具体为两个多项式的加法运算。代码考虑了各种特殊情况,如幂次不按顺序排列、系数为0的情况等,确保了在实际测试中的正确性和鲁棒性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

此题适用于翁恺老师的C语言程序设计数组编程题部分。网上关于这道题发布的代码大部分错误很多,有的人发出来的代码提交上去就直接Wrong Answer,还有的尽管可以Accept,但仅仅是通过了测试样例,实际测试中还仍存在诸多问题。下就将自己做的代码分享出来,水平有限,如仍有谬误还请指正。

题目内容

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

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

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

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

输入格式

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

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

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

输出格式

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

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

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

程序

#include<stdio.h>
#include<math.h>
const int INF=0x7fffffff;//INF为无穷大
int main(){
	int num[105]={0},max_index=-INF;//num下标存储的是幂,num存储的是多项式的系数
	//输入每一项的系数和幂
	for(int i=0;i<2;i++){//i代表第几个多项式
		int t1,t2;//t1是每一个项的幂,t2是每一个项的系数
		while(scanf("%d %d",&t1,&t2)){
			num[t1]+=t2;//这步实现多项式的加法,即系数相加
			if(max_index<t1)
			max_index=t1;//找出最大的幂,下面逆序输出的时候用
			if(t1==0)
			break;
		}
	}
	int flag=0,flag_0=0;//flag标记在要输出的一系列项中是否有值不为0的,flag_0标记是否输出过0
	//从最大的幂开始,倒叙输出每一项
	for(int i=max_index;i>=0;i--){
		if(num[i]){
			if(flag&&num[i]>0)
			printf("+");
			if(num[i]<0)
			printf("-");//第一步先确定符号的输入输出
				if(i==0)
				printf("%d",abs(num[i]));
				else if(num[i]==1||num[i]==-1){
				if(i==1)
				printf("x",i);
				else
				printf("x%d",i);
			}//这里特殊处理
				else if(i==1)
				printf("%dx",abs(num[i]));
				else
				printf("%dx%d",abs(num[i]),i);//第二步分四种情况进行输出幂和系数
		flag=1;
		}
		else{
			if(i==max_index&&i==0){
				flag_0=1;
				printf("0");
			}
		}
	}
	if(!flag&&!flag_0)//如果num中所有的值为0,并且没有输出过0
	printf("0");
	return 0;
} 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值