5-2 一元多项式的乘法与加法运算 (20分)
设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分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
--------------------------------------------------------------------------
个人觉得,对于一元多项式的加法,乘法问题,采用数组存储,难度会降低许多
--------------------------------------------------------------------------
1 #include<stdio.h> 2 3 struct Ploy 4 { 5 int co; //系数 6 int ex; //指数 7 }Ploy[1000]; 8 9 int main() 10 { 11 // 输入 12 int a, b, A[2005] = {0}, B[1005] = {0}; 13 int temp1, temp2; 14 int i,j, isFirst = 1, havaoutput = 0; 15 scanf("%d", &a); 16 for(i = 0; i < a; i++) 17 { 18 scanf("%d %d", &Ploy[i].co, &Ploy[i].ex); 19 B[Ploy[i].ex] += Ploy[i].co; 20 } 21 22 scanf("%d", &b); 23 for(i = 0; i < b; i++) 24 { 25 scanf("%d%d", &temp1, &temp2); 26 B[temp2] += temp1; 27 for(j = 0; j < a; j++) 28 A[temp2 + Ploy[j].ex] += temp1 * Ploy[j].co; 29 } 30 31 for(i = 2000; i >=0; i--) 32 { 33 if(A[i] != 0) 34 { 35 if(isFirst == 1) 36 { 37 printf("%d %d", A[i], i); 38 isFirst = 0; 39 } 40 else 41 { 42 printf(" %d %d", A[i], i); 43 } 44 havaoutput = 1; 45 } 46 } 47 if(havaoutput == 0) printf("0 0"); 48 printf("\n"); 49 50 isFirst = 1; 51 havaoutput = 0; 52 for(i = 1000; i >= 0; i--) 53 { 54 if(B[i] != 0) 55 { 56 if(isFirst == 1) 57 { 58 printf("%d %d", B[i], i); 59 isFirst = 0; 60 } 61 else 62 { 63 printf(" %d %d", B[i], i); 64 } 65 havaoutput = 1; 66 } 67 } 68 if(havaoutput == 0) printf("0 0"); 69 printf("\n"); 70 }