根据 逆波兰表示法,求表达式的值。
有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
说明:
整数除法只保留整数部分。
给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。
示例 :
输入:tokens = [“2”,“1”,"+",“3”,"*"]
输出:9
解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9
贴一个贼丑的代码 心塞塞。
//咋想的啊 能写出一句 //top = top -= 2; //无了大语了 int evalRPN(char ** tokens, int tokensSize){ int *stack = (int *)calloc(tokensSize,sizeof(int)); int top = 0; int a,b; // printf("%s",tokens[top]); for(int i = 0;i < tokensSize;i++) { char *c = tokens[i]; // printf("%s",c); // printf("%c",c[0]); // if(c[0] >= 42 && c[0] <= 48) // printf("aaa"); // if()/ // // if(tokens[i] == '+' || tokens[i] == '-' || tokens[i] == '*' || tokens[i] == '/' ) //以上注释 代表我的思考过程 到底咋判断啥是符号 小垃圾 if(strlen(c) == 1 && c[0] >= 42 && c[0] <= 47 ) { b = stack[top-1]; a = stack[top-2]; top = top- 2; switch(c[0]) { case '+': stack[top++] = a+b; break; case '-': stack[top++] = a-b; break; case '*': stack[top++] = a*b; break; case '/': stack[top++] = a/b; break; } // // stack[top++] = a } else { stack[top++] = atoi(c); //数字 🔢 } } return stack[--top]; }