题目内容
一个多项式可以表达为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>
#include<math.h>
#define MAX 100
int main(){
int x[MAX] = {0};//初始化数组
int exp=0, coef=0, count=0, n=0, m=0;
while(count!=2){
scanf("%d %d", &exp, &coef);
x[exp]+=coef;
if (exp == 0)
count++;
}
for (n = MAX-1; n >= 0; n--){
if (x[n] != 0){//系数为0不输出
if (m != 0 && x[n] > 0)//不是第一个数,且是正数,输出+
printf("+");
if (x[n] < 0) //负数 输出-
printf("-");
if ( n != 1) {//幂不为1
if (n == 0)//幂为0
printf("%d", abs(x[n]));
else if (x[n] == 1 || x[n] == -1)//系数为1或-1
printf("x%d", n);
else
printf("%dx%d", abs(x[n]), n);//幂为其他
}else { //幂为1
if(x[n]==1 || x[n]==-1){
printf("x");
}else{
printf("%dx",abs(x[n]));
}
}
m++; //第 m个系数不为0的项
}
}
if(m==0)//系数全为0
printf("0");
return 0;
}
我自己写的辣鸡代码【可忽略】
#include<stdio.h>
#define MAX 100
int main(){
int flag=2,i=0,exp=0,coef=0,max_p=0,max_c=0;
int a[MAX];
while(i<MAX){
a[i]=0;
i++;
}
//输入 (木桶排序)
while(flag){
scanf("%d %d",&exp,&coef);
a[exp]+=coef;
if(exp==0)
flag--;
}
//找到最大幂,并输出
for(i=MAX-1;i>=0;i--){
if(a[i]!=0){
max_p=i;
max_c=a[i];
break;
}
}
if(max_p==0)
printf("%d",a[0]);
else if(max_p==1){
if(max_c==1){
printf("x%+d",a[0]);
}else if(max_c==-1){
printf("-x%+d",a[0]);
}else{
printf("%dx%+d",max_c,a[0]);
}
}else{
if(max_c==1){
printf("x%d",max_p);
}else if(max_c==-1){
printf("-x%d",max_p);
}else{
printf("%dx%d",max_c,max_p);
}
}
//其他项
for(i=max_p-1; i>1; i--){
if(a[i]!=0){
if(a[i]==1){
printf("+x%d",i);
}else if(a[i]==-1){
printf("-x%d",i);
}else{
printf("%+dx%d",a[i],i);
}
}
}
if(a[1]!=0&&max_p>1){//保证max_p>1,避免重复输出
if(a[1]==1){
printf("+x%+d",a[0]);
}else if(a[1]==-1){
printf("-x%+d",a[0]);
}else{
printf("%+dx%+d",a[1],a[0]);
}
}
return 0;
}
/*
+%d 和 %+d的区别:
int i = 6;
printf("%+d +%d",i,i);//+6 +6
i = -6;
printf("%+d +%d",i,i);//-6 +-6
*/