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

前言

此题适用于翁恺老师的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
#include
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=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;
} 

你可能感兴趣的:(C语言学习)