#include<iostream>
using namespace std;
#include<stack>
#include<string>
#include<unordered_map>
stack<char> op;
stack<int> num;
unordered_map<char,int> grades;
int n;
void eval() //注意对于'/' C++和java是向0取整,python是向下取整
{
char opp=op.top();
op.pop();
int bb=num.top();
num.pop();
int aa=num.top();
num.pop();
int ans;
if(opp=='+')
ans=aa+bb;
else if(opp=='-')
ans=aa-bb;
else if(opp=='x')
ans=aa*bb;
else {
if(aa*bb>=0)
{
ans=aa/bb;
}else {
if(aa%bb)
ans=aa/bb;
else ans=aa/bb-1;
}
}
num.push(ans);
}
int main()
{
grades['+']=1; //运算符优先级
grades['-']=1;
grades['x']=2;
grades['/']=2;
cin>>n;
getchar();
for(int i=0;i<n;i++)
{
string str;
getline(cin,str);
op=stack<char> ();
num=stack<int> ();
for(int k=0;k<str.size();k++)
{
if(str[k]>='0' && str[k]<='9')
{
num.push(str[k]-'0');
continue;
}
if(op.size()>=1 && grades[op.top()]>=grades[str[k]])
{
eval();
}
op.push(str[k]);
}
while(!op.empty())
{
eval();
}
if(num.top()==24)
printf("Yes\n");
else printf("No\n");
}
return 0;
}
CCF-CSP 201903-2 二十四点 模拟 栈 计算表达式
最新推荐文章于 2023-09-14 00:43:50 发布