#include using namespace std; //四则运算的类 class fourArithmeticOperation { public: //四则运算的字符串 string s; //数字栈 stack val; //操作符栈 stack symbol; //构建函数 fourArithmeticOperation() { symbol.push('#'); } //表达式计算的过程 int process() { int i = 0, num; while (symbol.top() != '#' || i < s.size()) { //发现了数字 if (s[i] >= '0' && s[i] <= '9') { //为操作数 num = 0; //根据字符串转为数字的方法 while (s[i] >= '0' && s[i] <= '9') {//一直向后找是数字的 num *= 10; num += s[i] - '0'; ++i; } //数字入栈 val.push(num); //cout << num << "入栈val" << endl; } else { switch (cmp(symbol.top(), s[i])) { case '<': symbol.push(s[i]); //调试信息 // cout << s[i] << "入栈symbol" << endl; ++i; break; case '=': //用于前后等号对掉 //调试信息 // cout << symbol.top() << "出栈symbol" << endl; symbol.pop(); ++i; break; case '>': int a = val.top(); val.pop(); int b = val.top(); //出栈 // cout << b << "出栈val" << endl; val.pop(); val.push(cal(b, a, symbol.top())); //调试信息 // cout << a << symbol.top() << b << "=" << val.top() << endl; // cout << val.top() << "入栈val" << endl; //出栈 // cout << symbol.top() << "出栈symbol" << endl; symbol.pop(); break; } } } int res = val.top(); val.pop(); return res; } //操作符之间的优先级的比较 char cmp(char a, char b) { //右括号不会进栈,不必写右括号的优先级 //遇到右括号就弹出左括号 if (a == '#') { if (b == '#') { return '='; } else { return '<'; } } if (a == '+' || a == '-') { if (b == '*' || b == 'x' || b == 'X' || b == '/' || b == '(') { return '<'; } else { return '>'; } } if (a == '*' || a == 'x' || a == 'X' || a == '/') { if (b == '(') { return '<'; } else { return '>'; } } if (a == '(') { if (b == ')') { return '='; } else { return '<'; } } } //返回计算结果 int cal(int a, int b, char op) { switch (op) { case '+': return a + b; case '-': return a - b; case 'x': return a * b; case 'X': return a * b; case '*': return a * b; case '/': return a / b; } } }; int main() { fourArithmeticOperation s1; int n; cin >> n; for (int i = 0; i < n; i++) { cin >> s1.s; if (s1.process() == 24) { cout << "YES" << endl; } else { cout << "NO" << endl; } } return 0; }