#54771: C語言


rumm2859@gmail.com (青)


#include <stdio.h>

int main() {

    宣告n與m為兩組多項式的項數、p為次方、i與j為迴圈索引
    int n, m, p, i, j;
    
    宣告c為輸入的係數、cnt為計算結果有幾項、max為紀錄最高次方
    long long c;
    int cnt, max;
    
    宣告a陣列儲存各次方的係數和,題目要求次方最高到1000
    long long a[1001];

    初始化陣列a與最大次方max
    for (i = 0; i <= 1000; i++) a[i] = 0;
    max = 0;

    讀取第一組多項式的項數
    scanf("%d", &n);
    for (i = 0; i < n; i++) {
        
        讀取次方p與係數c並累加到陣列
        scanf("%d %lld", &p, &c);
        a[p] += c;
        
        更新目前出現過的最高次方
        if (p > max) max = p;
    }

    讀取第二組多項式的項數
    scanf("%d", &m);
    for (i = 0; i < m; i++) {
        
        讀取次方p與係數c並累加到陣列
        scanf("%d %lld", &p, &c);
        a[p] += c;
        
        更新最高次方
        if (p > max) max = p;
    }

    先掃描一遍看相加後剩下幾項係數不為0的項
    cnt = 0;
    for (i = 0; i <= 1000; i++) {
        if (a[i] != 0) cnt++;
    }

    如果完全沒有剩下的項
    if (cnt == 0) {
        
        輸出NULL
        printf("NULL!\n");
        
    } else {
        
        以降冪方式從最高次方開始輸出
        for (i = 1000; i >= 0; i--) {
            
            如果該次方的係數不等於0
            if (a[i] != 0) {
                
                依照格式輸出次方與係數
                printf("%d:%lld\n", i, a[i]);
            }
        }
    }

    程式正常結束
    return 0;
}