题目描述
利用指针实现如下函数功能:
int polycomb(char s1, char s2, char *buffer)
函数功能为:将s1,s2指向的多项式合并同类项后,存入buffer指向的变量中,函数返回为合并同类项后最高次的系数。在主函数中输出合并后的多项式,以及其最高次的系数。
说明:多项式均按照降次排列,且输入的多项式的系数均为一位整数,系数为零的项不显示。
输入
输入两行,分别为两个多项式,多项式按照降次排列,输入数据中每项系数均为一位且不为0
输出
输出合并之后的多项式,以及其最高次的系数,多项式按降次排列,且系数为0的项不显示
样例输入
x^3+2x^2-5x+6
-2x^2-2x
样例输出
x^3-7x+6 1
我写的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
| #include <stdio.h> #include <string.h>
int ans[1024];
void clac(char *s) {
int a = 0, b;
for (int i = 0; i < strlen(s); ++i) { char c = s[i];
if (c == '+') { ans[0] += a; a = 1; } else if (c == '-') { ans[0] += a; a = -1; } else if (c > '0' && c <= '9') { int k = (c - '0'); for (; (c = s[i+1]) && c >= '0' && c <= '9'; ++i) { k = 10*k + (c - '0'); } if (!a) a = 1; a *= k; } else if (c == 'x') { if (i == 0) { a = 1; }
c = s[i+1]; if (c == '^') { b = s[i += 2] - '0'; for (; (c = s[i+1]) && c >= '0' && c <= '9'; ++i) { b = 10*b + (c - '0'); } } else { b = 1; }
ans[b] += a; a = 0; } }
ans[0] += a; }
int main() { char s1[1024], s2[1024];
scanf("%s%s", s1, s2);
memset(ans, 0, sizeof(ans)); clac(s1); clac(s2);
int begin = 1, max;
for (int i = 1023; i > 0; --i) { if (!ans[i]) continue;
if (begin) { max = ans[i]; } else { if (ans[i] > 0) { printf("+"); } }
if (ans[i] == -1) { printf("-"); } else if (ans[i] != 1) { printf("%d", ans[i]); }
printf("x");
if (i != 1) { printf("^%d", i); }
begin = 0; }
if (!begin && ans[0] > 0) printf("+"); if (ans[0]) { printf("%d", ans[0]); if (begin) max = ans[0]; }
printf(" %d", max);
return 0; }
|