这道题没有做完,不过基本思路已经了解了,懒得改了。时间不是很充裕。等我考完研回来再做!!
题目内容:
一个多项式可以表达为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>
struct number
{
int pow; //幂
int c; //系数
}number[100];
int main()
{
//输入
//统计输入的个数
int cat=-1;
do{
cat++;
scanf("%d %d",&number[cat].pow ,&number[cat].c);
}while(number[cat].pow != 0);//当幂次为0时输入完成
//对结构按幂从小到大排序
for( int i = cat -1; i>0; i-- )
{
int minid = 0;
for(int j = 1; j < i+1; j++)
{
if( number[minid].pow > number[j].pow)
{
minid = j;
}
}
struct number t;
t =number[minid];
number[minid] = number[i];
number[i] = t;
}
//检验成功
// for(int i=0; i<cat; i++){
// printf("%dx%d\n", number[i].c, number[i].pow);
// }
//幂次相同项系数合并
int j=0;
for(int i=1; i<cat; i++)
{
if(number[j].pow != number[i].pow)
{
number[++j] = number[i];
}
else
{
number[j].c += number[i].c;
}
}
for(int i=0; i<=j; i++){
if(number[i].c != 0)
{
if(number[i].pow == 0)
{
printf("%d", number[i].c);
}else
{
printf("%dx%d", number[i].c, number[i].pow);
}
if(i != j ){
printf("+");
}
}
}
return 0;
}
是两个多项式的求和,每个多项式的结束标志是幂为0。