package stack;
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
new Main().init();
}
private void init() {
int n=0;
Stack<Character> op = new Stack<>();
Scanner scanner = new Scanner(System.in);
if (scanner.hasNextInt()) {
n=scanner.nextInt();
}
String[] expArr = new String[n];
for(int i=0; i<n; i++){
if (scanner.hasNext()) {
expArr[i]=scanner.next();
}
}
scanner.close();
for(int i=0; i<expArr.length; i++){
char[] charArr = expArr[i].toCharArray();
StringBuilder sb = new StringBuilder();
for(int j=0; j<charArr.length; j++){
if (charArr[j]>='1'&&charArr[j]<='9') {
sb.append(charArr[j]);
}else {
if (charArr[j]=='+'||charArr[j]=='-') {
if (!op.isEmpty() && (op.peek()=='x' || op.peek()=='/')) {
sb.append(op.pop());
op.push(charArr[j]);
}else {
op.push(charArr[j]);
}
}else {
op.push(charArr[j]);
}
}
}
while(!op.isEmpty()){
sb.append(op.pop());
}
cal(sb.toString());
}
}
private void cal(String string) {
char[] charArr = string.toCharArray();
Stack<Integer> stack = new Stack<>();
for(int i=0; i<charArr.length; i++){
if (charArr[i]>='1' && charArr[i]<='9') {
stack.push(Integer.parseInt(charArr[i]+""));
}else {
int a=0,b=0;
b=stack.pop();
a=stack.pop();
if (charArr[i]=='+') {
stack.push(a+b);
}else if (charArr[i]=='-') {
stack.push(a-b);
}else if (charArr[i]=='x') {
stack.push(a*b);
}else if (charArr[i]=='/') {
stack.push(a/b);
}else {
}
}
}
if (24==stack.pop()) {
System.out.println("Yes");
}else {
System.out.println("No");
}
}
}
分析:
1.将表达式转换成后缀表达式;
2.用堆栈计算后缀表达式的值;
如有问题,欢迎指正。