Fetch the repository succeeded.
一个多项式可以表达为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>
// 多项式A,B, 求和之后结果保存到A
int a[101], b[101];
// 读入多项式
int readPoly(int a[])
{
int m, n;
while (1)
{
scanf("%d %d", &m, &n);
a[m]=n;
if (m==0)
break;
}
return 0;
}
// 多项式加法
int addPloy(int a[], int b[])
{
for (int i=0;i<101;i++)
a[i] += b[i];
return 0;
}
// 打印一项nx^m, 第一项first=1
int printOne(int m, int n, int *first)
{
if (*first)
*first=0;
else if (n>0)
printf("+");
if (m==0)
{
printf("%d", n);
return 0;
}
if (n==-1)
printf("-x");
else if (n==1)
printf("x");
else
printf("%dx", n);
if (m>1)
printf("%d",m);
}
// 打印多项式
int printPloy(int a[])
{
int i=100;
int first=1, printed=0;
for (i=100;i>=0;i--)
if (a[i]) break;
while (i>=0)
{
if (a[i])
{
printOne(i, a[i], &first);
printed=1;
}
i--;
}
if (!printed) printf("0");
printf("\n");
return 0;
}
int main()
{
readPoly(a);
readPoly(b);
addPloy(a,b);
printPloy(a);
return 0;
}
Sign in for post a comment
Comment ( 0 )