C语言版本 试了一下 有一个问题 负数不加括号的话 不能正常运算 例如:6+2*-2 输出结果不是2 尝试着改进了一下,代码如下 #include <stdio.h> #include <string.h> #include <ctype.h> int pos; int compute(char* data) { int len = strlen(data); int stack[1000]; int top = -1; int num = 0,flg = 1; char flag = '+'; while (pos < len) { if (data[pos] == '{' || data[pos] == '[' || data[pos] == '(') { pos++; num=compute(data); } while (pos < len && isdigit(data[pos])) { num = num*10 + data[pos] -'0'; pos++; } num *= flg; flg = 1; if(data[pos] == '-' && (flag == '*' || flag == '/') ) { flg = -1; } else { switch (flag) { case '+': stack[++top] = num; break; case '-': stack[++top] = -num; break; case '*': stack[top] *= num; break; case '/': stack[top] /= num; break; } num = 0; flag = data[pos]; } if (data[pos] == '}' || data[pos] == ']'|| data[pos] == ')') { pos++; break; } pos++; } int res = 0; for (int i = 0; i <= top; i++) { res += stack[i]; } return res; } int main() { char data[1000]; while (scanf("%s", data) != EOF) { pos = 0; int res = compute(data); printf("%d\n", res); } return 0; }</ctype.h></string.h></stdio.h>
3

相关推荐

点赞 评论 收藏
分享
牛客网
牛客企业服务