設計函數分別求兩個一元多項式的乘積與和。
輸入格式:
輸入分2行,每行分別先給出多項式非零項的個數,再以指數遞降方式輸入一個多項式非零項系數和指數(絕對值均為不超過1000的整數)。數字間以空格分隔。
輸出格式:
輸出分2行,分別以指數遞降方式輸出乘積多項式以及和多項式非零項的系數和指數。數字間以空格分隔,但結尾不能有多余空格。零多項式應輸出0 0
。
輸入樣例:
4 3 4 -5 2 6 1 -2 0
3 5 20 -7 4 3 1
輸出樣例:
15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
5 20 -4 4 -5 2 9 1 -2 0
#include<cstdio> const int maxn = 2050; int add[maxn] = {0}; int mul1[maxn] = {0},mul2[maxn];int main(){int n;scanf("%d",&n);int exp,coe; //exp指數,coe系數 for(int i = 0; i < n; i++){scanf("%d %d",&coe,&exp);add[exp] += coe;mul1[exp] += coe;}scanf("%d",&n);for(int i = 0; i < n; i++){scanf("%d %d",&coe,&exp);add[exp] += coe;for(int j = maxn; j >= 0; j--){if(mul1[j] != 0){mul2[j+exp] += mul1[j] * coe;}}}int cnt1 = 0,cnt2 = 0;for(int i = 0; i < maxn; i++){if(add[i] != 0) cnt1++;if(mul2[i] != 0) cnt2++;}if(cnt2 == 0) printf("0 0\n");else for(int i = maxn; i >= 0; i--){if(mul2[i] != 0){printf("%d %d",mul2[i],i);cnt2--;if(cnt2 > 0) printf(" ");else printf("\n");} }if(cnt1 == 0){printf("0 0");return 0;}for(int i = maxn; i >= 0; i--){if(add[i] != 0){printf("%d %d",add[i],i);cnt1--;if(cnt1 > 0) printf(" ");else printf("\n");}}return 0; }
?