18 lines
701 B
Plaintext
18 lines
701 B
Plaintext
procedure evalRPN(string s)
|
|
sequence stack = {}
|
|
sequence ops = split(s)
|
|
for i=1 to length(ops) do
|
|
string op = ops[i]
|
|
switch op
|
|
case "+": stack[-2] = stack[-2]+stack[-1]; stack = stack[1..-2]
|
|
case "-": stack[-2] = stack[-2]-stack[-1]; stack = stack[1..-2]
|
|
case "*": stack[-2] = stack[-2]*stack[-1]; stack = stack[1..-2]
|
|
case "/": stack[-2] = stack[-2]/stack[-1]; stack = stack[1..-2]
|
|
case "^": stack[-2] = power(stack[-2],stack[-1]); stack = stack[1..-2]
|
|
default : stack = append(stack,scanf(op,"%d")[1][1])
|
|
end switch
|
|
?{op,stack}
|
|
end for
|
|
end procedure
|
|
evalRPN("3 4 2 * 1 5 - 2 3 ^ ^ / +")
|