运用顺序表实现多项式相加

本题要求输入两个一元多项式,然后输出它们的和(相加后得到的一元多项式)

输入格式:

输入一个整数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;                
}

希望能够帮到你,有问题可以随时提问,我们一起进步吧! 

如果你觉得这篇内容对你有所启发或者帮助,请不要吝啬一个赞哦,让更多需要帮助的人看到它吧!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

平静方能至远

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值