多項式加法-week7-C語言習題集

happy_bigqiang發表於2016-07-22

多項式加法(5分)
題目內容:
一個多項式可以表達為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

#include <stdio.h>
#include <stdlib.h>
#define SIZE 10
/*
1 注意flag的存放,不能放在for迴圈裡面,否則每次for迴圈都置flag=0,導致內層else始終無法執行;
2 判斷條件中,arr[i]與i不要弄混了,這是邏輯錯誤
3 總體思路,先按係數分三類1,每類1裡面,按首項和其他項分類2,每類2裡面再按指數不同分三種處理情況,對應輸出不同格式
*/
int main()
{
    int coef,expo;
    int cnt=0;
    int arr[SIZE];
    int i;
    for (i=0;i<SIZE;i++){
        arr[i]=0;
    }
    while(scanf("%d %d",&expo,&coef)){
        arr[expo] += coef; // 這一步忘了要可以實現重複加,所以要多個+號
        if (expo == 0) cnt++;
        if (cnt == 2) break;
    }
    //忘了加for 以便逆序輸出int flag = 0;
    //不能放在for迴圈裡面,否則每次for迴圈都置flag=0,導致內層else始終無法執行;
    for (i=SIZE-1;i>=0;i--){
        if (arr[i]>1 || arr[i] <-1){ //判斷條件中,arr[i]與i不要弄混了,這是邏輯錯誤
            if (!flag){
                flag = 1;
                if (i>1){
                    printf("%dx%d",arr[i],i);
                }
                else if (i == 1){
                    printf("%dx",arr[i]);
                }
                else{
                     printf("%d",arr[i]);
                }
            }
            else {
                    if (i>1){
                        printf("%+dx%d",arr[i],i);
                    }
                    else if (i == 1){
                        printf("+%dx",arr[i]);
                    }
                    else{
                         printf("+%d",arr[i]);
                    }
            }

        }
        else if (arr[i] == 1){
            flag = 1;
            if (!flag){
                flag = 1;
                if (i>1){
                    printf("x%d",i);
                }
                else if (i == 1){
                    printf("x");
                }
                else{
                     printf("1");
                }
            }
            else {
                    if (i>1){
                        printf("+x%d",i);
                    }
                    else if (i == 1){
                        printf("+x");
                    }
                    else{
                         printf("+1");
                    }
            }

        }
        else if (arr[i] == -1){
            if(!flag){
                flag =1;
                if (i>1){
                    printf("-x%d",i);
                }
                else if (i == 1){
                    printf("-x");
                }
                else {
                    printf("-1");
                }
            }
        }
    }
    if (flag == 0)
        printf("0");

    return 0;
}

相關文章