題目內(nèi)容
一個多項式可以表達為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("-"); //負數(shù)可不用絕對值,不額外輸出負號崔赌,但為代碼可讀性意蛀,符號統(tǒng)一輸出。
}
}
}
}
return 0;
}