牛客链接
题目
Emacs号称神的编辑器,它自带了一个计算器。与其他计算器不同,它是基于后缀表达式的,即运算符在操作数的后面。例如“2 3 +”等价于中缀表达式的“2 + 3”。
请你实现一个后缀表达式的计算器。
输入描述
输入包含多组数据。
每组数据包括两行:第一行是一个正整数n (3≤n≤50);紧接着第二行包含n个由数值和运算符组成的列表。
“±*/”分别为加减乘除四则运算,其中除法为整除,即“5/3=1”。
输出描述
对应每一组数据,输出它们的运算结果。
解题思路
根据挨个输入的字符串来查询是数字还是对应符号,如果是数字则正常入栈,如果是符号,则取出栈顶两个元素进行符号相应的运算即可,循环至输入的字符串全部遍历完为止,栈顶元素就是最后的计算结果,直接取出即可。
代码实现
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while(in.hasNext()){
Stack<Integer> stack = new Stack<>();
int n=in.nextInt();
for (int i = 0; i < n; i++) {
String s=in.next();
if (s.equals("+")){
stack.add((stack.pop()+stack.pop()));
}else if(s.equals("-")) {
int a = stack.pop();
int b = stack.pop();
stack.add(b-a);
}else if(s.equals("*")){
stack.add((stack.pop()*stack.pop()));
}else if(s.equals("/")){
int a = stack.pop();
int b = stack.pop();
if (a!=0) {
stack.add(b / a);
}else {
stack.add(0);
}
}else {
stack.add(Integer.parseInt(s));
}
}
System.out.println(stack.peek());
}
}
}