陷阱很多 要细心 ,每一步都要清晰 不然很容易就报错
- 这里的乘号为 x
- 一个符号对应一个数字 符号用好之后 还剩一个数字
- 四则运算都要用数字进行
- debug真是个好东西
import java.util.Scanner; import java.util.Stack; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); for (int i = 0; i < n; i++) { String str = sc.next(); if (is_24(str)) System.out.println("Yes"); else System.out.println("No"); } } public static boolean is_24(String str) { Stack stack = new Stack(); Stack nums = new Stack(); int ans = 0; for (int i = 0; i < str.length(); i++) { if (str.charAt(i) == '+') stack.push(str.charAt(i) + ""); else if (str.charAt(i) == '-') stack.push(str.charAt(i) + ""); else if (str.charAt(i) == 'x') { int flag = str.charAt(i + 1) - '0'; int temp = nums.pop() * flag ; nums.push(temp); i++; } else if (str.charAt(i) == '/') { int flag = str.charAt(i + 1) - '0'; int temp = nums.pop() / flag; nums.push(temp); i++; } else if (str.charAt(i) - '0' = 0) nums.push(str.charAt(i) - '0'); } while (!stack.isEmpty()) { if (stack.peek().equals("-")) ans += nums.pop() * (-1); else if (stack.peek().equals("+")) ans += nums.pop(); stack.pop(); } ans += nums.pop(); if (ans == 24) return true; else return false; } }