NowCoder从小就喜欢数学,喜欢在笔记里记录很多表达式。它觉得现在的表达式写法很麻烦,为了提高运算符优先级,不得不添加很多括号,不小心漏了一个右括号的话差之毫厘谬之千里。
因此他改用前缀表达式,例如`(2 + 3) * 4`写成`* + 2 3 4`,这样就能避免使用括号了。这样的表达式书写简单,但计算却不够直观。请你写一个程序帮他计算这些前缀表达式吧。
输入包含多组数据,每组数据包含两行。
第一行为正整数n(3≤n≤50),紧接着第二行包含n个由数值和运算符组成的列表。
“+-*/”分别为加减乘除四则运算,其中除法为整除,即“5/3=1”。
对应每一组数据,输出它们的运算结果。
3 + 2 3 5 * + 2 2 3 5 * 2 + 2 3
5 12 10
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
String[] arr = new String[n];
Stack<Integer> stack = new Stack<>();
for (int i = 0; i < n; i ++ )
arr[i] = sc.next();
for (int i = n - 1; i >= 0; i -- ) {
if(arr[i].equals("+")) stack.push(stack.pop() + stack.pop());
else if(arr[i].equals("-")) stack.push(stack.pop() - stack.pop());
else if(arr[i].equals("*")) stack.push(stack.pop() * stack.pop());
else if(arr[i].equals("/")) stack.push(stack.pop() / stack.pop());
else stack.push(Integer.parseInt(arr[i]));
}
System.out.println(stack.pop());
}
}
}