中国大学mooc 程序设计入门 翁恺 第七周作业一

# 中国的大学MOOC 程序设计入门 翁恺 第七周作业一
题目内容:

一个多项式可以表达为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

时间限制:500ms内存限制:32000kb

代码如下:

 

此代码仅使用一维数组判定,不需二维,也不需要定义结构。适合按照温恺老师mooc一章一章来的同学使用,当然我们也能使用链表来计算,不过这里感觉没啥区别,数组即可实现。

#include <stdio.h>
 /*该问题要读入两个多项式,且x的幂次从0到100,那么在c语言中很容易联想到数组也是从0开始计数,
那么便可以创造一个101个容量的数组,在对应幂次
  的地方存放该幂次的系数,这样便可以将两个多项式存储起来,
对于输出环节面临的问题有这样几个,1,当幂次大于1,幂次等于1,
幂次等于0时输出的形式是不一样的,
  2:当系数等于0,等于1,时输出的形式也不一样 3:需要判断该输出项是否为第一项,因为第一项为正时不需要输出“+”。
  有些繁琐,但是读完代码会发现,每一块的判别都是一样的。
*/


int main(int argc, const char * argv[]) {
    // insert code here...
    int e = 0;
    int number[101];
    int number2[101];
    int i;
    //使两个数组都初始化为0
    for (i=0;i<101;i++){
        number[i]=0;
    }
    for (i=0;i<101;i++){
        number2[i]=0;
    }
    //读入两个多项式,分别保存到number,number2数组
    int a,b;
    do {scanf("%d %d",&a,&b);
        number[a]=b;
    }while(a!=0);
    
    int c,d;
    do {scanf("%d %d",&c,&d);
        number2[c]=d;
    }while(c!=0);
    //输出
    int count=1;//计数子,因为输出的第一项如果是正数则不用加“+”,故而用来判断是否是输出的第一项,从而决定要不要加符号。
    for (i=100;i>=0;i--){
        e = number[i]+number2[i];//相同幂次项求和
        if(i>1){
            if(e==0){
                
            }else{
                if(e == 1){
                    if(count==1){
                    printf("x%d",i);
                    }else{
                        printf("+x%d",i);
                        count++;
                    }
                }else{
                if(e>1){
                    if(count==1){
                        printf("%dx%d",e,i);
                        count++;
                    }else{
                printf("+");
                printf("%dx%d",e,i);
                count++;
            }
                }else{
                printf("%dx%d",e,i);
                count++;
            }
            }
            }
        }else{
            if(i==1){
                if(e==0){
                    
                }else{
                    if(e == 1){
                    if(count==1){
                    printf("x");
                    }else{
                        printf("+x");
                        count++;
                    }
                }else{
                    if(e>1){
                        if(count==1){
                            printf("%dx",e);
                            count++;
                        }else{
                        printf("+");
                        printf("%dx",e);
                        count++;
                        }
                    }else{
                        printf("%dx",e);
                        count++;
                    }
                    
                }
               
            }
            }
            if(i==0){
                if(e==0){
                    if(count==1){
                        printf("0");
                    }
                }else{
                    if(e>0){
                        if(count==1){
                            printf("%d",e);
                        }else{
                        printf("+%d",e);
                        }
                    }else{
                        printf("%d",e);
                    }
                    
            }
          
        }
            
        
    }
        }
    return 0;
}
    

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值