题目内容: 一个多项式可以表达为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>
int main()
{
int max=0;
int input[101]={0};
int cnt=0;
//第一步:记录数组数据
int x,y;
while (1)
{
scanf("%d %d",&x,&y);
if(x>100){
break;
}
if(max<x&&y!=0){
max=x;
}
if(input[x]==0){
input[x]=y;
}else{
input[x]+=y;
}
if (x==0){
cnt++;
if (cnt==2)
{
break;
}
}
}
//第二步:分情况讨论输出情况
int cc =0;
for(max;max>=0;max--){
if(input[max]!=0){
cc++;
if(cc>1&&input[max]>0){ //(1)非第一位的系数为正的项需要'+'号,其余负数自带符号
printf("+");
}
if(input[max]==1||input[max]==-1){//(2)系数为 ±1时
if(max==0){
printf("%d",input[max]); //①常数项正常打印即可
}
else if(max==1){ //②1幂次分别可能输出x与-x
if(input[max]==1){
printf("x");
}
else{
printf("-x");
}
}
else{
printf("x%d",max); //③其他幂次输出x后面带上幂次
}
}
else{ //(3)系数为非0、非±1、整数
if(max==0){
printf("%d",input[max]); //①常数位
}
else if(max==1){
printf("%dx",input[max]); //②1幂次
}
else{
printf("%dx%d",input[max],max); //③其他幂次
}
}
}
else if(max==0) { //此时幂数为0 且系数为0
if(cc==0){
printf("0");
}
else{
printf("+0"); //常数项为0但其他项不为0
}
}
}
return 0;
}