二十四点_ci

二十四点_ci_02

 

思路 : 暴力求挺麻烦的,借助栈结构可以减少代码量,

分别有一个数字栈和一个符号栈,当有乘除时,先计算再压入栈,当有加减时,往符号栈加 + , 同时将减号也处理成加号.

#include <iostream>
#include <cstdio>
#include <cstring>
#include <stack>
using namespace std ;
const int MAX = 1005 ;

char str[MAX] ;

int main(){

int n ;
cin >> n ;

while(n--){
stack<int> num ;
stack<char> sign ;
cin >> str ;
for(int i = 0 ; i<strlen(str);i++ ) {
if(isdigit(str[i])){
num.push(str[i]-'0') ;
}
else{
if(str[i] == 'x') {
int now = num.top() ;
num.pop();
num.push(now*(str[i+1]-'0')) ;
i++;
}
else if (str[i] == '+'){
sign.push('+') ;
}
else if(str[i] =='-') {
// 将减号改为加号
num.push( (-1)*(str[i+1]-'0')) ;
i++;
sign.push('+') ;
}
else{ // 除法
int now = num.top() ;
num.pop() ;
num.push(now/(str[i+1]-'0')) ;
i++ ;
}
}
}
while(!sign.empty()){
int sum1 = num.top() ;
num.pop() ;
int sum2 = num.top() ;
num.pop() ;
sign.pop() ;
num.push(sum1+sum2) ;
}

if(num.top() == 24) printf("Yes\n") ;
else printf("No\n");

}



return 0 ;
}