这里是问题↓
题目内容:
一个多项式可以表达为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
我试了几个例子 都能符合题意。。但是它老说我答案错误 哭QWQ
这里放上来的代码老是掉东西 我放在下面评论了QWQ 大佬们别走!!
#include
int main()
{
int a[100][2]; //第一个多项式
int b[100][2]; //第二个多项式
int i, j, al, bl;
for (i = 0;; i++)//输入第一个多项式
{
for (j = 0; j<2; j++)
{
scanf("%d", &a[i][j]);
}
if (a[i][0] == 0)
break;
}
al = i + 1;//第一个多项式总项数
for (i = 0;; i++)//输入第二个多项式
{
for (j = 0; j<2; j++)
{
scanf("%d", &b[i][j]);
}
if (b[i][0] == 0)
break;
}
bl = i + 1;//第二个多项式总项数
for (i = 0; i<al; i++)//同幂次项数相加,存放在第一个多项式中
{
for (j = 0; j<bl; j++)
{
if (a[i][0] == b[j][0])
{
a[i][1] += b[j][1];
b[j][0] = -1;
break;
}
}
}
for (i = 0; i<bl; i++)//将第二个多项式中有的而第一个多项式中没有的项添加到第一个多项式中
{
if (b[i][0] != -1)
{
a[al][0] = b[i][0];
a[al][1] = b[i][1];
al++;//总项数改变
}
}
for (i = 0; i<al; i++)//选择排序法,将幂次从大到小排列
{
for (j = i + 1; j<al; j++)
{
if (a[i][0]<a[j][0])
{
int t;
t = a[i][0];
a[i][0] = a[j][0];
a[j][0] = t;
t = a[i][1];
a[i][1] = a[j][1];
a[j][1] = t;
}
}
}
int flag = 1;
for (i = 0; i<al; i++)//输出形如ax2+bx+c的答案
{
if (a[i][1] != 0)//输出系数不为0的项
{
flag = 0;
printf("%d", a[i][1]);
if (i < al - 1)//最后一项的幂次一定为0,因此只输出倒数第二项及之前的项所带的x
{
if (a[i][0] != 1)
printf("x%d", a[i][0]);//幂次不为1的项输出其幂次
else
printf("x");//幂次为1的项不输出幂次,即不输出1
if (a[i + 1][1] > 0)
printf("+");//下一个项为正数时输出加号(下一个项为负数时自带负号,因此不考虑负号)
}
}
}
if (flag)
printf("0");//所有系数都为0时输出0
printf("\n");
}
本来想回答你的问题,但你所给的程序有太多的语法错误。