Evaluate Reverse Polish Notation
Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are +, -, *, /. Each operand may be an integer or another expression.
Some examples:
["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9
["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
int evalRPN(char** tokens, int tokensSize) {
int stack[10000]={0};
int i,n;
int sl;
sl=0;
for(i=0;i<tokensSize;i++)
{
if(tokens[i][0]=='+')
{
stack[sl-2]+=stack[sl-1];
sl--;
continue;
}
if(tokens[i][0]=='-'&&!tokens[i][1])
{
stack[sl-2]-=stack[sl-1];
sl--;
continue;
}
if(tokens[i][0]=='*')
{
stack[sl-2]*=stack[sl-1];
sl--;
continue;
}
if(tokens[i][0]=='/')
{
stack[sl-2]/=stack[sl-1];
sl--;
continue;
}
n = atoi(tokens[i]);
stack[sl++]=n;
}
return stack[0];
}
堆栈操作,注意负号和减号的区分。