网易云课堂_程序设计入门-C语言_第六章:数组_1多项式加法

时间:2021-10-26 21:27:49
1
多项式加法(5分)

题目内容:

一个多项式可以表达为x的各次幂与系数乘积的和,比如:

网易云课堂_程序设计入门-C语言_第六章:数组_1多项式加法

现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出。

程序要处理的幂最大为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

时间限制:500ms内存限制:32000kb
 
 #include <stdio.h>
main()
{
int a[][], b[][], c[][];
int i, j, m, n, cnt = ; for (i = ; i < ; i++) /* a表清零 */
{
for (j = ; j < ; j++)
{
a[i][j] = ;
}
} for (i = ; i < ; i++) /* b表清零 */
{
for (j = ; j < ; j++)
{
b[i][j] = ;
}
} for (i = ; i < ; i++) /* c表清零 */
{
for (j = ; j < ; j++)
{
c[i][j] = ;
}
} do {
scanf("%d %d", &m, &n);
a[m][] = m;
c[m][] = m;
a[m][] = n;
} while (m != ); /* 输入a表,输入c表的第0列幂,不输入c表的第1列系数 */ do {
scanf("%d %d", &m, &n);
b[m][] = m;
c[m][] = m;
b[m][] = n;
} while (m != ); /* 输入b表,输入c表的第0列幂,不输入c表的第1列系数 */ for (i = , j = ; i < ; i++) /* 统计c表的第1列系数 */
{
c[i][] = a[i][] + b[i][];
} for (i = ; i > ; i--) /* 从c表的第100行开始循环,一直到第2行 */
{
if (c[i][] != ) /* 只统计c表第1列系数不为0 */
{
if (c[i][] == ) /* 如果c表第1列系数==1,比如40 1 */
{
if (cnt > ) /* 如果输出超过一次,记得前面加正号+ */
{
printf("+");
}
printf("x%d", c[i][]); /* 输出x40 */
}
else if (c[i][] == -) /* 如果c表第1列系数==-1,比如40 -1 */
{
printf("-x%d", c[i][]); /* 前面加负号-,系数-1省略,输出-x40 */
}
else /* 其他情况,c表第1列系数不等于1,也不等于-1 */
{
if (c[i][] < )
{
printf("%dx%d", c[i][], c[i][]); /* 系数小于0,直接输出 */
}
else
{
if (cnt > )
{
printf("+"); /* 如果系数大于0,需要考虑是否第一次输出,不是第一次输出,需要前面加正号+ */
}
printf("%dx%d", c[i][], c[i][]);
}
}
cnt++;
}
} if (c[][] != ) /* c表第1行第1列系数不等于0 */
{
{
if (c[][] == ) /* 如果c表第1列系数==1 */
{
if (cnt > )
{
printf("+"); /* 如果输出超过一次,记得前面加正号+ */
}
printf("x");
}
else if (c[][] == -) /* 如果c表第1列系数==-1 */
{
printf("-x");
}
else
{
if (a[][] > && cnt > ) /* 如果系数大于0,需要考虑是否第一次输出,不是第一次输出,需要前面加正号+ */
{
printf("+"); /* 如果输出超过一次,记得前面加正号+ */
}
printf("%dx", c[][]);
}
cnt++;
}
} if (c[][] != )
{
if (cnt > )
{
printf("+"); /* 如果系数大于0,需要考虑是否第一次输出,不是第一次输出,需要前面加正号+ */
}
printf("%d", c[][]);
cnt++;
} if (cnt == )
{
printf("");
}
}