test 7.1 多項式加法(5分) 程序設(shè)計入門——C語言(浙江大學(xué) - 翁愷)

文章鏈接

題目內(nèi)容

一個多項式可以表達(dá)為x的各次冪與系數(shù)乘積的和,比如:
2x6+3x5+12x3+6x+20
現(xiàn)在,你的程序要讀入兩個多項式,然后輸出這兩個多項式的和,也就是把對應(yīng)的冪上的系數(shù)相加然后輸出。

程序要處理的冪最大為100。

輸入格式

總共要輸入兩個多項式,每個多項式的輸入格式如下:

每行輸入兩個數(shù)字,第一個表示冪次,第二個表示該冪次的系數(shù),所有的系數(shù)都是整數(shù)。第一行一定是最高冪,最后一行一定是0次冪。

注意第一行和最后一行之間不一定按照冪次降低順序排列;如果某個冪次的系數(shù)為0,就不出現(xiàn)在輸入數(shù)據(jù)中了;0次冪的系數(shù)為0時還是會出現(xiàn)在輸入數(shù)據(jù)中。

輸出格式

從最高冪開始依次降到0冪,如:
2x6+3x5+12x3-6x+20
注意其中的x是小寫字母x,而且所有的符號之間都沒有空格,如果某個冪的系數(shù)為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 內(nèi)存限制:32000kb

代碼實現(xiàn)
C語言
#include<stdio.h>
#include<math.h>

int main() {
    const int N = 101;
    int A[N];
    
    for ( int i = 0; i < N; i++) {
        A[i] = 0;
    }
        
    int endtag = 0;
    int n, a;
    while ( endtag < 2 ) {
        scanf("%d %d", &n, &a);
        
        if ( n == 0 ) {
            endtag ++;
        }
        
        if ( A[n] != 0 ) {
            A[n] += a;
        } else {
            A[n] = a;
        }
    }
    //判斷最大冪 
    int maxpower = 0;
    for ( int i = N; i > 0; i-- ) {
        if (A[i] != 0 ) {
            maxpower = i;
            break;
        }
    }
    //分只有0次冪和有非0次冪兩種情況 
    if (maxpower == 0) {
        printf("%d", A[0]); //如果只有0次冪,直接輸出 
    } else {
        for ( int i = maxpower; i > -1; i--) {
            //非0次冪分冪大于1,冪等于1,冪等于0三種情況,每種情況中又分系數(shù)絕對值為1和不為1兩種情況。 
            if ( i > 1) {           
                if ( abs(A[i]) == 1 ) {
                    printf("x%d", i);
                } else if ( abs(A[i]) > 1 ) {
                    printf("%dx%d", abs(A[i]), i);
                }
            } else if (i == 1 ) {
                if ( abs(A[i]) == 1 ) {
                    printf("x");
                } else if ( abs(A[i]) > 1) {
                    printf("%dx", abs(A[i]));
                }
            } else {
                if ( A[i] != 0 ) {
                    printf("%d", abs(A[i]));
                }
            }
            //為方便理解,上面用的全部是絕對值,故需要添加運算符號。通過判斷下一個非0系數(shù)添加符號。 
            if ( i > 0){
                if ( A[i-1] > 0 ) {
                    printf("+");
                } else if ( A[i-1] < 0 ) {
                    printf("-");    //負(fù)數(shù)可不用絕對值,不額外輸出負(fù)號,但為代碼可讀性,符號統(tǒng)一輸出。 
                }
            }
        }
    }
    
    return 0;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容