題目內容
一個多項式可以表達為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
代碼實現
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三種情況,每種情況中又分系數絕對值為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系數添加符號。
if ( i > 0){
if ( A[i-1] > 0 ) {
printf("+");
} else if ( A[i-1] < 0 ) {
printf("-"); //負數可不用絕對值,不額外輸出負號,但為代碼可讀性,符號統一輸出。
}
}
}
}
return 0;
}