题目描述
一个多项式可以表达为x的各次幂与系数乘积的和,比如:2x^6+3x^5+12x^3+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
C语言源代码:
#include<stdio.h>
#include<math.h>
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++)
{
if (a[i][1] != 0)
{
flag = 0;
printf("%d", a[i][1]);
if (i < al - 1)
{
if (a[i][0] != 1)
printf("x%d", a[i][0]);
else
printf("x");
if (a[i + 1][1] > 0)
printf("+");
}
}
}
if (flag)
printf("0");
printf("\n");
return 0;
}