题目内容:
一个多项式可以表达为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
时间限制:500ms
内存限制:32000kb
弄了一天终于弄出来了,自己还是太菜了
#include <stdio.h>
//多项式相加
int main()
{
int polynum[101]={0}; //建立1个数组用于存储多项式,并将其初始化为0
int mi,xishu,i,flag=0,k=0;
for (i=0;i<=1;i++) //循坏两次输入数据
{
do //将数据输入,对应项相加
{
scanf("%d %d",&mi,&xishu);
polynum[mi]+=xishu;
}while(mi);
}
for (i=100;i>=0;i--)
{
if (flag==1 && polynum[i]>0) //非输出结果第一项,且系数大于0,要输出加号
{
k=1;
if (polynum[i]>=2) //系数大于1
{
if (i>=2)
{
printf("+%dx%d",polynum[i],i);
}else if (i==1)
{
printf("+%dx",polynum[i]);
}else if (i==0)
{
printf("+%d",polynum[i]);
}
}else if (polynum[i]==1) //系数等于1
{
if (i>=2)
{
printf("+x%d",i);
}else if (i==1)
{
printf("+x");
}else if (i==0)
{
printf("+1");
}
}
}
else if (flag==0 || polynum[i]<0) //输出结果第一项或系数小于0,不用输出加号
{
if (polynum[i]<=-2) //系数小于-1
{
if (i>=2)
{
printf("%dx%d",polynum[i],i);
}else if (i==1)
{
printf("%dx",polynum[i]);
}else if (i==0)
{
printf("%d",polynum[i]);
}
flag=1;
}else if (polynum[i]==-1) //系数等于-1
{
if (i>=2)
{
printf("-x%d",i);
}else if (i==1)
{
printf("-x");
}else if (i==0)
{
printf("-1");
}
flag=1; //第一项输出完毕,开关关闭
k=1;
}else if (polynum[i]>0) //系数大于0
{
if (polynum[i]>=2)
{
if (i>=2)
{
printf("%dx%d",polynum[i],i);
}else if (i==1)
{
printf("%dx",polynum[i]);
}else if (i==0)
{
printf("%d",polynum[i]);
}
}else if (polynum[i]==1)
{
if (i>=2)
{
printf("x%d",i);
}else if (i==1)
{
printf("x");
}else if (i==0)
{
printf("1");
}
}
flag=1; //第一项输出完毕,开关关闭
k=1;
}
}
}
if (k==0) printf("0"); //若对应项相加全部为0,即没有项输出,则输出0
return 0;
}
弄了一天终于弄出来了,自己还是太菜了