多项式加法(C语言)

题目内容:

一个多项式可以表达为x的各次幂与系数乘积的和,比如:
2x6+3x5+12x3+6x+20
现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出。
程序要处理的幂最大为100。

输入格式:

总共要输入两个多项式,每个多项式的输入格式如下:
每行输入两个数字,第一个表示幂次,第二个表示该幂次的系数,所有的系数都是整数。第一行一定是最高幂,最后一行一定是0次幂。
注意第一行和最后一行之间不一定按照幂次降低顺序排列;如果某个幂次的系数为0,就不出现在输入数据中了;0次幂的系数为0时还是会出现在输入数据中。

输出格式:

从最高幂开始依次降到0幂,如:
2x6+3x5+12x3-6x+20
注意其中的x是小写字母x,而且所有的符号之间都没有空格,如果某个幂的系数为0则不需要有那项。

这道题目分数是5分,我第一次提交程序时只得到了1分,之后进行修改得到2分,再之后得到了3分,最后终于得到5分啦,好艰难啊~
第一个要考虑的是系数为1、-1。
第二个要考虑的是多项式加法的结果为0。

第三个就是用例4一直显示不通过,可用如下数据进行测验,
4 12
3 -6
2 2
1 1
0 2
4 -12
3 6
0 0
(这个数据来自于mooc翁恺程序设计入门——C语言讨论区)
我使用这个程序发现了自己的程序的缺陷,我是由于输出结果的第一项为正数时,依然输出了“+”而出错的。

#include 

int main(){
    int i, j, num, len_arr, len_brr, len, flag, arr[101], brr[101], sum[101];

    for (i=0; i<101; i++){ //初始化数组元素为0 
        arr[i] = 0;
        brr[i] = 0;
        sum[i] = 0;
    }

    i = 0; //输入数据 用一维数组存储数据 
    while (1){
        scanf("%d", &num);
        scanf("%d", &arr[num]);
        if (i == 0){
            len_arr = num + 1;
        }
        i++;
        if (num == 0){
            break;
        }
    }
    i = 0;
    while (1){
        scanf("%d", &num);
        scanf("%d", &brr[num]);
        if (i == 0){
            len_brr = num + 1;
        }
        i++;
        if (num == 0){
            break;
        }
    }

    /*for (i=0; i

    len = (len_arr>=len_brr?len_arr:len_brr); //对数组求和 
    for (i=0; i<len; i++){
        sum[i] = arr[i] + brr[i];
    }
    
    flag = 0;
    for (i=len-1; i>=0; i--){ //输出数据 
        if (sum[i] != 0){
            flag++;
            if (i==len-1){
                if (sum[i] > 0){ 
                    printf("%d", sum[i]);
                }
                else{
                    printf("-");
                    if (sum[i] != -1){
                        printf("%d", -sum[i]);
                    }
                }
            }
            else if (i!=len-1 && sum[i]>0){
                if (flag != 1){
                    printf("+");
                }
                if (sum[i] != 1){
                    printf("%d", sum[i]);
                } 
            }
            else if (i!=len-1 && sum[i]<0){
                printf("-");
                if (sum[i] != -1){
                    printf("%d", -sum[i]);
                }
                if (i==0 && sum[i]==-1){
                    printf("%d", -sum[i]);
                }
            }
            if (i != 0){
                printf("x");
            }
            if (i > 1){
                printf("%d", i);
            }
        }
    }
    if (flag == 0){
        printf("0");
    }

    return 0;
}

你可能感兴趣的:(c语言)