求逆波兰表达式的值。
在逆波兰表达法中,其有效的运算符号包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰计数表达。
样例
["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9
在逆波兰表达法中,其有效的运算符号包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰计数表达。
样例
["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9
["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
import java.util.Scanner;
import java.util.Stack;
/**
* 求逆波兰表达式的值。
在逆波兰表达法中,其有效的运算符号包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰计数表达。
样例
["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9
["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
* @author Dell
*
*/
public class Test424 {
public static int evalRPN(String[] tokens)
{
Stack<Integer> s=new Stack<>();
for(int i=0;i<tokens.length;i++)
{
try{
int temp=Integer.parseInt(tokens[i]);
s.push(temp);
}catch(Exception e){
int a=s.pop();
int b=s.pop();
int result=0;
switch(tokens[i])
{
case "+": result=a+b;
break;
case "*": result=a*b;
break;
case "-": result=b-a;
break;
case "/": result=b/a;
}
s.push(result);
}
}
return s.pop();
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
String[] tokens=s.split(",");
System.out.println(evalRPN(tokens));
}
}