1
多项式加法(5分)
题目内容:
一个多项式可以表达为x的各次幂与系数乘积的和,比如:
现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出。
程序要处理的幂最大为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
1 #include <stdio.h> 2 main() 3 { 4 int a[101][2], b[101][2], c[101][2]; 5 int i, j, m, n, cnt = 0; 6 7 for (i = 0; i < 101; i++) /* a表清零 */ 8 { 9 for (j = 0; j < 2; j++) 10 { 11 a[i][j] = 0; 12 } 13 } 14 15 for (i = 0; i < 101; i++) /* b表清零 */ 16 { 17 for (j = 0; j < 2; j++) 18 { 19 b[i][j] = 0; 20 } 21 } 22 23 for (i = 0; i < 101; i++) /* c表清零 */ 24 { 25 for (j = 0; j < 2; j++) 26 { 27 c[i][j] = 0; 28 } 29 } 30 31 do { 32 scanf("%d %d", &m, &n); 33 a[m][0] = m; 34 c[m][0] = m; 35 a[m][1] = n; 36 } while (m != 0); /* 输入a表,输入c表的第0列幂,不输入c表的第1列系数 */ 37 38 do { 39 scanf("%d %d", &m, &n); 40 b[m][0] = m; 41 c[m][0] = m; 42 b[m][1] = n; 43 } while (m != 0); /* 输入b表,输入c表的第0列幂,不输入c表的第1列系数 */ 44 45 for (i = 0, j = 1; i < 101; i++) /* 统计c表的第1列系数 */ 46 { 47 c[i][1] = a[i][1] + b[i][1]; 48 } 49 50 for (i = 100; i > 1; i--) /* 从c表的第100行开始循环,一直到第2行 */ 51 { 52 if (c[i][1] != 0) /* 只统计c表第1列系数不为0 */ 53 { 54 if (c[i][1] == 1) /* 如果c表第1列系数==1,比如40 1 */ 55 { 56 if (cnt > 0) /* 如果输出超过一次,记得前面加正号+ */ 57 { 58 printf("+"); 59 } 60 printf("x%d", c[i][0]); /* 输出x40 */ 61 } 62 else if (c[i][1] == -1) /* 如果c表第1列系数==-1,比如40 -1 */ 63 { 64 printf("-x%d", c[i][0]); /* 前面加负号-,系数-1省略,输出-x40 */ 65 } 66 else /* 其他情况,c表第1列系数不等于1,也不等于-1 */ 67 { 68 if (c[i][1] < 0) 69 { 70 printf("%dx%d", c[i][1], c[i][0]); /* 系数小于0,直接输出 */ 71 } 72 else 73 { 74 if (cnt > 0) 75 { 76 printf("+"); /* 如果系数大于0,需要考虑是否第一次输出,不是第一次输出,需要前面加正号+ */ 77 } 78 printf("%dx%d", c[i][1], c[i][0]); 79 } 80 } 81 cnt++; 82 } 83 } 84 85 if (c[1][1] != 0) /* c表第1行第1列系数不等于0 */ 86 { 87 { 88 if (c[1][1] == 1) /* 如果c表第1列系数==1 */ 89 { 90 if (cnt > 0) 91 { 92 printf("+"); /* 如果输出超过一次,记得前面加正号+ */ 93 } 94 printf("x"); 95 } 96 else if (c[1][1] == -1) /* 如果c表第1列系数==-1 */ 97 { 98 printf("-x"); 99 } 100 else 101 { 102 if (a[1][1] > 0 && cnt > 0) /* 如果系数大于0,需要考虑是否第一次输出,不是第一次输出,需要前面加正号+ */ 103 { 104 printf("+"); /* 如果输出超过一次,记得前面加正号+ */ 105 } 106 printf("%dx", c[1][1]); 107 } 108 cnt++; 109 } 110 } 111 112 if (c[0][1] != 0) 113 { 114 if (cnt > 0) 115 { 116 printf("+"); /* 如果系数大于0,需要考虑是否第一次输出,不是第一次输出,需要前面加正号+ */ 117 } 118 printf("%d", c[0][1]); 119 cnt++; 120 } 121 122 if (cnt == 0) 123 { 124 printf("0"); 125 } 126 }