题解 | #四则运算#
四则运算
https://www.nowcoder.com/practice/9999764a61484d819056f807d2a91f1e
#include <stdio.h> #include <string.h> // 1.无括号 用栈先乘除后加减 // 遇到+-继续入栈,遇到*/出栈1个,和新元素计算后入栈 // 2.有括号 左括号开始递归1步骤,右括号出递归结果 入栈 //注意遇到括号内有负号先要变号再入栈 int i; int calcu(char *str); int main() { char str[1001] = {0}; scanf("%s",str); printf("%d",calcu(str)); } int calcu(char *str){ char flag = '+'; int num = 0,ret = 0; int stack[1000] = {0},esp = -1; while(i<strlen(str)){ num = 0; flag = '+'; if(str[i]=='-' || str[i]=='+' || str[i]=='*' || str[i]=='/'){ flag = str[i]; i ++; } if(str[i]=='(' || str[i]=='[' ||str[i]=='{'){ i ++; num = calcu(str); } while(str[i]>='0' && str[i]<='9'){ num = num*10 + str[i] - '0'; i ++; } switch(flag){ case '+': stack[++esp] += num; break; case '-': stack[++esp] -= num; break; case '*': stack[esp] *= num; break; case '/': stack[esp] /= num; break; } if(str[i]==')' || str[i]==']' ||str[i]=='}'){ i ++; break; } } for(int k=0;k<=esp;k++) ret += stack[k]; return ret; }