多项式加法(10分)

一个多项式可以表达为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>
/*读入两个多项式,然后输出两个多项式的和;
 *最大的幂次为100
 */
int main()
{
    static int poly[101][2]; //用于存放多项式,每行两列,第一列用于存放对应幂次的系数;第二列用于表示第几个多项式;
    int index,cofficient;
    int index_max[2],cofficient_max[2];
    int i;


    for(i=0;i<2;i++)//输入两个多项式循环;
    {
        printf("请输入第%d个多项式:\n",i+1);
        printf("请按照幂次 系数的顺序输入多项式\n");
        
        do
        {
            printf("请先输入最高幂次值([0,100])及其系数\n");
            scanf("%d %d",&index_max[i],&cofficient_max[i]);
            if(index_max[i]<=100 && index_max[i]>=0)
            {
                poly[index_max[i]][i]=cofficient_max[i];
                break;
            }
        }while(index_max[i]!=0);


        if(index_max[i]!=0)//如果最高幂次是0次幂时,就不用继续输入数据了。
        {
      
//      printf("Test sentence.Ignore it and go on entering.\n");
            do 
            {
                scanf("%d %d",&index,&cofficient);
                if(index<index_max[i])
                {
                    poly[index][i]=cofficient;//对应幂次的系数
                }
            }while(index!=0);//指数为0时,认为多项式输入结束
        }
        
        //检查下输入结果
/*
        int j ;
        for (j=0;j<=index_max[i];j++)
        {
            printf("幂次%d\t系数%d\t",j,poly[j][i]);
            printf("\n");
        }
        printf("\n");
*
*/
    }
    //得到幂次的最大值;
    printf("第一个多项式的最高幂次为%d\n",index_max[0]);
    printf("第二个多项式的最高幂次为%d\n",index_max[1]);
    int index_m = index_max[0] ;
    if (index_max[0] < index_max[1])
    {
        index_m = index_max[1];
    }


    printf("最大的幂次是%d\n",index_m);
    //输出求和后的结果;
    
    int new_poly[index_m+1];//新的数组,存放新的多项式;
    for(i=0;i<=index_m;i++)
    {
        new_poly[i]=poly[i][0]+poly[i][1];
        printf("%d\t",new_poly[i]);
    }
    
        printf("上面是新的指数,下面是最后输出结果。\n");


    int is_zero = 1;
    for(i=0;i<=index_m;i++)
    {
        if (new_poly[i]!=0)
        {
            is_zero = 0;
        }
    }
    
    if (is_zero)
    {
        printf("0");
    }
    else
    {
        if(index_m !=0 && index_m != 1)//幂次不为0时输出;
        {
            if(new_poly[index_m]!=0)
            {
                if(new_poly[index_m] !=1 && new_poly[index_m] != -1)
                {
                    printf("%dx%d",new_poly[index_m],index_m);//输出最高位;
                }
                else if(new_poly[index_m] == 1)
                {
                    printf("x%d",index_m);
                }
                else if(new_poly[index_m] == -1)
                {
                    printf("-x%d",index_m);
                }
            }
        }


        else if(index_m == 1)
        {
            if(new_poly[1]==1)
            {
                printf("x");
            }
            if(new_poly[1]== -1)
            {
                printf("-x");
            }
            else if(new_poly[index_m]!=0 )
            {
                printf("%dx",new_poly[index_m]);
            }


        }


        //输出中间位;
        for(i=index_m-1;i>1;i--)
        {
            if(new_poly[i] > 0 && new_poly[i]!=1)
            {
                printf("+%dx%d",new_poly[i],i);
            }
            else if(new_poly[i]>0 && new_poly[i]==1)
            {
                printf("+x%d",i);
            }
             else if(new_poly[i] < 0 && new_poly[i]!=-1)
            {
                printf("%dx%d",new_poly[i],i);
            }
            else if(new_poly[i] < 0 && new_poly[i] ==-1)
            {
                printf("-x%d",i);
            }


        
        }
        
        if(index_m != 1)
        {
            if(new_poly[1] > 1)
            {
                printf("+%dx",new_poly[i]);
            }
            else if(new_poly[1] ==1 )
            {
                printf("+x");
            }
            else if(new_poly[1] < -1)
            {
                printf("%dx",new_poly[i]);
            }
            else if(new_poly[1] == -1)
            {
                printf("-x");
            }
        }
       
        //输出最低位;
        if(new_poly[0] >0)
        {
            printf("+%d",new_poly[0]);
        }
        else if (new_poly[0] < 0)
        {
            printf("%d",new_poly[0]);
        }
       // else if(index_m !=0 )
       // {
       //     printf("\b \b");
       // }
        
    }
    printf("\n");


    return 0;
    


}



以上代码在提交过程中仍旧出现错误。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值