本题要求输入两个一元多项式,然后输出它们的和(相加后得到的一元多项式)
输入格式:
输入一个整数n(表示输入组数),然后依次输入每一组数据:
输入一个整数A(表示多项式的项数,小于100),然后输入A对整数,每一对整数表示对应项的指数和系数。
输出格式:
对每一组输入,在一行中输出得到的一元多项式。
输入样例:
在这里给出一组输入。例如:
2
5
0 2
1 4
5 7
7 10
8 19
4
0 3
2 6
4 19
5 -9
3
0 3
4 7
8 2
3
0 -3
5 9
7 21
输出样例:
在这里给出相应的输出。例如:
5x^0+4x^1+6x^2+19x^4-2x^5+10x^7+19x^8
7x^4+9x^5+21x^7+2x^8
以下是帮助大家参考的源代码:
#include<stdio.h>
int main(){
int n,i,j=0,max=0,sum=0,temp=0,a[35][2];
scanf("%d",&n);
//输入相关的数据
for(i=1;i<=n;i++){
int m;
scanf("%d",&m);
sum+=m;
for(;j<sum;j++){
scanf("%d %d",&a[j][0],&a[j][1]);
if(i==0)
max=a[j][0];
else if(max<a[j][0])
max=a[j][0];
}
}
temp=j;
for(i=1;i<=n;i++){
int m;
scanf("%d",&m);
sum+=m;
for(;j<sum;j++){
scanf("%d %d",&a[j][0],&a[j][1]);
if(i==0)
max=a[j][0];
else if(max<a[j][0])
max=a[j][0];
}
}
int sum1=0,initial=0,enter=0,noagain=0;
j=0;
//遍历多项式,先记住所输入的最大指数
while(1){
for(i=0;i<=temp-1;i++){
if(a[i][0]==j){
sum1+=a[i][1]; enter=1;
}
if((i+1==sum)&&sum1==0&&enter==1&&noagain==0){
initial=1;
}
}
enter=0;
if((j==0||sum1<0)&&sum1!=0){
printf("%dx^%d",sum1,j);
}
else if(sum1>0&&sum1!=0&&initial==1){
printf("%dx^%d",sum1,j);
initial=0;noagain=1;
}
else if(sum1>0&&sum1!=0){
printf("+%dx^%d",sum1,j);
}
sum1=0;
if(j==max)break;
j++;
}
printf("\n");
j=0;enter=0;noagain=0;initial=0;
while(2){
for(i=temp;i<sum;i++){
//i为对数的数量
//从每组数中寻找对应指数的系数,找到后相加
if(a[i][0]==j){
sum1+=a[i][1]; enter=1;
//问题就在这里
}
if((i+1==sum)&&sum1==0&&enter==1&&noagain==0){
initial=1;
}
}
enter=0;
if((j==0||sum1<0)&&sum1!=0){
printf("%dx^%d",sum1,j);}
else if(sum1>0&&sum1!=0&&initial==1){
printf("%dx^%d",sum1,j);
initial=0;noagain=1;}
else if(sum1>0&&sum1!=0){
printf("+%dx^%d",sum1,j);
}
if(j==max)break;
sum1=0;
j++;
}
return 0;
}
有问题可以随时提问,我们一起进步吧!