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
Subscribe to see which companies asked this question
解答:
这道题只要注意有负数就可以了。
int evalRPN(char** tokens, int tokensSize) { int stack[tokensSize]; int top = -1, sum, i, j; for(i = 0; i < tokensSize; i++){ if(*(tokens[i]) >= '0'&&*(tokens[i]) <= '9'){ sum = 0; for(j = 0; tokens[i][j] != 0; j++){ sum = sum * 10 + tokens[i][j] - '0'; } stack[++top] = sum; } else{ if('+' == *(tokens[i])){ stack[top - 1] = stack[top - 1] + stack[top]; } else if('-' == *(tokens[i])){ if(0 == tokens[i][1]) stack[top - 1] = stack[top - 1] - stack[top]; else{ sum = 0; for(j = 1; tokens[i][j] != 0; j++){ sum = sum * 10 + tokens[i][j] - '0'; } stack[++top] = -sum; continue; } } else if('*' == *(tokens[i])){ stack[top - 1] = stack[top - 1] * stack[top]; } else if('/' == *(tokens[i])){ stack[top - 1] = stack[top - 1] / stack[top]; } top--; } } return stack[top]; }