【样例1输入】
10
9+3+4x3
5+4x5x5
7-9-9+8
5x6/5x4
3+5+7+9
1x1+9-9
1x9-5/9
8/5+6x9
6x7-3x6
6x4+4/5
【样例1输出】
Yes
No
No
Yes
Yes
No
No
No
Yes
Yes
第一回合
利用栈stack来处理表达式,最后将元素依次相加即可得到最终结果,注意将字符串转换为int型数据
#include<iostream>
#include<algorithm>
#include<string>
#include<stack>
using namespace std;
int main(){
int n;
cin>>n;
string s;
while(n--){
stack<int> q; //声明栈
cin>>s;
int t=1;
for(int i=0;i<(int)s.size();i++){
// 如果 s[i] 是 0-9 的字符, s[i] - '0' 就得到了 对应的数值
if(s[i]>='0' && s[i]<='9'){
q.push(t*(s[i]-'0'));
}else if(s[i]=='+' || s[i]=='-'){
if(s[i]=='-'){
t=-1;
}else{
t=1;
}
}
else{
int a=q.top(); //将栈顶元素pop出来进行计算后再push进去
q.pop();
i++;
int b=s[i]-'0';
if(s[i-1]=='/'){
q.push(a/b); //将计算得来的新的结果push进栈
}else{
q.push(a*b);
}
}
}
int ans=0;
while(!q.empty()){ // 如果栈不为空
ans+=q.top();
q.pop();
}
if(ans==24){
cout<<"Yes"<<endl;
}else{
cout<<"No"<<endl;
}
// cout << (ans==24 ) ? "Yes" :"No";
}
return 0;
}
ps
也可使用队列求解