根据 逆波兰表示法,求表达式的值。
有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
说明:
整数除法只保留整数部分。
给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 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); //数字
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)