为了账号安全,请及时绑定邮箱和手机立即绑定

求大神编写一个计算多项式加法的C程序!

求大神编写一个计算多项式加法的C程序!

C
yuantongxin 2016-04-27 20:27:47
多项式加法题目内容:一个多项式可以表达为x的各次幂与系数乘积的和,比如:现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出。程序要处理的幂最大为100。输入格式:总共要输入两个多项式,每个多项式的输入格式如下:每行输入两个数字,第一个表示幂次,第二个表示该幂次的系数,所有的系数都是整数。第一行一定是最高幂,最后一行一定是0次幂。注意第一行和最后一行之间不一定按照幂次降低顺序排列;如果某个幂次的系数为0,就不出现在输入数据中了;0次幂的系数为0时还是会出现在输入数据中。输出格式:从最高幂开始依次降到0幂,如:2x6+3x5+12x3-6x+20注意其中的x是小写字母x,而且所有的符号之间都没有空格,如果某个幂的系数为0则不需要有那项。输入样例:6 25 33 121 60 206 25 32 121 60 20输出样例:4x6+6x5+12x3+12x2+12x+40
查看完整描述

5 回答

已采纳
?
asd8532

TA贡献143条经验 获得超187个赞

#include <stdio.h>
#include <math.h>
  
void outNum(int j,int k)
{
    int absk = abs(k);
    if(absk==1 && j!=1 && j!=0)
    {
        printf("x%d",j);
    }
    else if(absk==1 && j!=0)
    {
        printf("x");
    }
    else if(absk==1)
    {
        printf("%d",absk);
    }
    else if(j==0)
    {
        printf("%d",absk);
    }
    else if(j==1)
    {
        printf("%dx",absk);
    }
    else
    {
        printf("%dx%d",absk,j);
    }
  
}
  
int main()
{
    int num[101] = { (0) };
    int cut = 0;
    int ent = 0;
    int i,j,k;
    while(cut < 2)
    {
        k=0;
        scanf("%d %d",&j,&k);
        num[j] += k;
        if(j==0)
            cut++;
    }
  
    for(i=100;i>-1;i--)
    {
        j=i;
        k=num[j];
        if(k!=0)
        {
            ent++;
            if(cut==2)
            {
                if(k<0)
                    printf("-");
                outNum(j,k);
                cut ++;
            }
            else
            {
                if(k<0)
                {
                    printf("-");
                    outNum(j,k);
                }
                else
                {
                    printf("+");
                    outNum(j,k);
                }
            }
        }
    }
    if(ent==0)
        printf("0");
  
    return 0;
}


查看完整回答
1 反对 回复 2016-04-27
  • NoDocCat
    NoDocCat
    abs()这个函数不是在stdlib.h的头文件里吗?
?
慕运维0355845

TA贡献2条经验 获得超1个赞

#include<stdio.h> 
int main(  )
{
    int m,x;
    int a[101]={0,};
    int i,j;
    
    for( i=0; i<2; ++i )
    {
        m=101;
        while( m!=0 )
        {
            scanf( "%d %d", &m, &x );
            a[m] +=x;
        }
    }
    
    for( j=100; j>=0; j-- )
    {
        if( a[j] && j>1 )
        {
            printf( "%dx%d+",a[j], j );
        }
        else if( a[j] && j==1 )
        {
            printf( "%dx+",a[j] );
        }
        else if( a[j] && j==0 )
        {
            printf( "%d", a[j] );
        }
    }
    
    return 0;
}


查看完整回答
1 反对 回复 2018-02-23
?
慕的地219750

TA贡献1条经验 获得超1个赞

#include <stdio.h>
int main ()
{
    int a,b;
    int i;
    int k;
    int number[101]={0};
    for (k=0;k<2;k++)
    {
        for (;;)
        {
            scanf("%d %d",&a,&b);
            number[a] = number[a]+b;
            if (a==0)
            {
                break;
            }
        }
    }
    for (i=100;i>=0;i--)
    {
        if (number[i]>0)
        {
            printf("%d",number[i]);
            if (i>0)
            {
                printf("x");
            }
            if (i>1)
            {
                printf("%d",i);
            }
            if (i>0)
            {
                printf("+");
            }
        }
    }
    return 0;
}


查看完整回答
1 反对 回复 2018-01-21
?
NoDocCat

TA贡献5条经验 获得超19个赞

我来一个简化的

#include <stdio.h>

void printResult(int m, int c);

int main() {
    int num[101] = {0};
    int m = 0;                  //幂数
    int c = 0;                  //次数
    int count = 0;              //记录输出的次数
    int isFirstOut = 1;         //是否为第一次输出

    for (int i = 0; i < 2; i++) {
        do {
            scanf("%d %d", &m, &c);
            num[m] += c;
        } while (m != 0);
    }

    for (int i = 100; i >= 0; i--) {
        m = i;
        c = num[i];

        if (c != 0) {
            count++;                            //计数
            if (isFirstOut) {                   //当第一次输出时
                printResult(m, c);
                isFirstOut = 0;                 //更新状态
            } else {
                if (c > 0) {
                    printf("+");
                }
                printResult(m, c);
            }
        }
    }

    //当一次也没有输出时 输出0
    if (count == 0) {
        printf("0");
    }
}

void printResult(int m, int c) {
    if (m != 0) {
        if (c != 1) {                               //当次数不为1时 输出次数
            printf("%d", c);
        }
        printf("x");
        if (m != 1) {                               //当幂数不为1时 输出幂数
            printf("%d", m);
        }
    } else {                                        //当幂数为0时 只输出次数
        printf("%d", c);
    }
}


查看完整回答
1 反对 回复 2017-02-17
  • 慕的地219750
    慕的地219750
    大神。可以问下我这个哪里错了吗。。我实在找不到谢谢 #include <stdio.h> int main () { int a,b; int i; int k; int number[101]={0}; for (k=0;k<2;k++) { for (;;) { scanf("%d %d",&a,&b); number[a] = number[a]+b; if (a==0) { break; } } } for (i=100;i>=0;i--) { if (number[i]>0) { printf("%d",number[i]); if (i>0) { printf("x"); } if (i>1) { printf("%d",i); } if (i>0) { printf("+"); } } } return 0; }
  • 慕的地219750
    慕的地219750
    怎么 好像不能分行呢。。我给这个提问者回复一下 您可以帮忙看一下吗。。谢谢
?
慕运维0355845

TA贡献2条经验 获得超1个赞

111

查看完整回答
反对 回复 2018-02-23
  • 5 回答
  • 1 关注
  • 6252 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信