9.9 360 修复方程
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Stack; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); StringBuilder res = new StringBuilder(); for (int i = 0; i < n; i++) { String s = br.readLine(); res.append(invoke(s)?"Yes":"No").append("\n"); } System.out.println(res); } static boolean invoke(String s){ if(handler(s)) return true; boolean flag=false; //第一层循环找插入字符位置 for (int i = 0; i <=s.length() ; i++) { //第二层循环插入0-9 for (int j = 0; j < 10; j++) { flag|=handler(s.substring(0,i)+j+s.substring(i)); } } return flag; } //把等式拆开,比较两边相等 static boolean handler(String s) { int i = s.indexOf('='); return execute(s.substring(0,i))==execute(s.substring(i+1)); } //计算单一的式子(模拟计算器,只有乘加,所以比较简单) static int execute(String s) { char[] chars = s.toCharArray(); int tem = chars[0] - '0'; Stack<Integer> numstack = new Stack<>(); Stack<Character> charstack = new Stack<>(); for (int i = 1; i < s.length(); i++) { char c = chars[i]; if (Character.isDigit(c)) { tem = tem * 10 + c - '0'; } else { numstack.push(tem); tem = 0; if (c == '+') { while (!charstack.empty() && charstack.peek() == '*') { charstack.pop(); numstack.push(numstack.pop() * numstack.pop()); } } charstack.push(c); } } numstack.push(tem); while (!charstack.empty()) { Character pop = charstack.pop(); if(pop=='+'){ numstack.push(numstack.pop() + numstack.pop()); }else { numstack.push(numstack.pop() * numstack.pop()); } } return numstack.pop(); } }
#360笔试#