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>
/*读入两个多项式,然后输出两个多项式的和;
*最大的幂次为100
*/
int main()
{
static int poly[101][2]; //用于存放多项式,每行两列,第一列用于存放对应幂次的系数;第二列用于表示第几个多项式;
int index,cofficient;
int index_max[2],cofficient_max[2];
int i;
for(i=0;i<2;i++)//输入两个多项式循环;
{
printf("请输入第%d个多项式:\n",i+1);
printf("请按照幂次 系数的顺序输入多项式\n");
do
{
printf("请先输入最高幂次值([0,100])及其系数\n");
scanf("%d %d",&index_max[i],&cofficient_max[i]);
if(index_max[i]<=100 && index_max[i]>=0)
{
poly[index_max[i]][i]=cofficient_max[i];
break;
}
}while(index_max[i]!=0);
if(index_max[i]!=0)//如果最高幂次是0次幂时,就不用继续输入数据了。
{
// printf("Test sentence.Ignore it and go on entering.\n");
do
{
scanf("%d %d",&index,&cofficient);
if(index<index_max[i])
{
poly[index][i]=cofficient;//对应幂次的系数
}
}while(index!=0);//指数为0时,认为多项式输入结束
}
//检查下输入结果
/*
int j ;
for (j=0;j<=index_max[i];j++)
{
printf("幂次%d\t系数%d\t",j,poly[j][i]);
printf("\n");
}
printf("\n");
*
*/
}
//得到幂次的最大值;
printf("第一个多项式的最高幂次为%d\n",index_max[0]);
printf("第二个多项式的最高幂次为%d\n",index_max[1]);
int index_m = index_max[0] ;
if (index_max[0] < index_max[1])
{
index_m = index_max[1];
}
printf("最大的幂次是%d\n",index_m);
//输出求和后的结果;
int new_poly[index_m+1];//新的数组,存放新的多项式;
for(i=0;i<=index_m;i++)
{
new_poly[i]=poly[i][0]+poly[i][1];
printf("%d\t",new_poly[i]);
}
printf("上面是新的指数,下面是最后输出结果。\n");
int is_zero = 1;
for(i=0;i<=index_m;i++)
{
if (new_poly[i]!=0)
{
is_zero = 0;
}
}
if (is_zero)
{
printf("0");
}
else
{
if(index_m !=0 && index_m != 1)//幂次不为0时输出;
{
if(new_poly[index_m]!=0)
{
if(new_poly[index_m] !=1 && new_poly[index_m] != -1)
{
printf("%dx%d",new_poly[index_m],index_m);//输出最高位;
}
else if(new_poly[index_m] == 1)
{
printf("x%d",index_m);
}
else if(new_poly[index_m] == -1)
{
printf("-x%d",index_m);
}
}
}
else if(index_m == 1)
{
if(new_poly[1]==1)
{
printf("x");
}
if(new_poly[1]== -1)
{
printf("-x");
}
else if(new_poly[index_m]!=0 )
{
printf("%dx",new_poly[index_m]);
}
}
//输出中间位;
for(i=index_m-1;i>1;i--)
{
if(new_poly[i] > 0 && new_poly[i]!=1)
{
printf("+%dx%d",new_poly[i],i);
}
else if(new_poly[i]>0 && new_poly[i]==1)
{
printf("+x%d",i);
}
else if(new_poly[i] < 0 && new_poly[i]!=-1)
{
printf("%dx%d",new_poly[i],i);
}
else if(new_poly[i] < 0 && new_poly[i] ==-1)
{
printf("-x%d",i);
}
}
if(index_m != 1)
{
if(new_poly[1] > 1)
{
printf("+%dx",new_poly[i]);
}
else if(new_poly[1] ==1 )
{
printf("+x");
}
else if(new_poly[1] < -1)
{
printf("%dx",new_poly[i]);
}
else if(new_poly[1] == -1)
{
printf("-x");
}
}
//输出最低位;
if(new_poly[0] >0)
{
printf("+%d",new_poly[0]);
}
else if (new_poly[0] < 0)
{
printf("%d",new_poly[0]);
}
// else if(index_m !=0 )
// {
// printf("\b \b");
// }
}
printf("\n");
return 0;
}
以上代码在提交过程中仍旧出现错误。