栈
329. 仿 LISP 运算
import java.util.Scanner;
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.nextLine().replace("div", "/").replace("mul", "*")
.replace("add", "+").replace("sub", "-");
Deque<String> stack = new ArrayDeque<>();
int res = 0;
for (int i = 0; i < s.length(); i++) {
String temp = s.substring(i, i + 1);
if (!temp.equals(")")){ // 入栈
stack.push(temp);
continue;
}
StringBuilder sb = new StringBuilder();
while (!"(".equals(stack.peek())){
sb.insert(0, stack.pop());
}
String[] split = sb.toString().split(" ");
String slogan = split[0];
int a = Integer.parseInt(split[1]);
int b = Integer.parseInt(split[2]);
if ("/".equals(slogan) && b == 0){
System.out.println("error");
return;
}
res = cal(slogan, a, b);
stack.pop(); // 弹出 "("
stack.push(res + "");
}
System.out.println(res);
}
public static int cal(String str, int a, int b){
if ("/".equals(str)){
if (a / b < 0 && a % b != 0){
return a / b - 1;
}
return a / b;
}
if ("-".equals(str)){
return a - b;
}
if ("+".equals(str)){
return a + b;
}
return a * b;
}
}