版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42449444/article/details/100593824
用一个栈来存放数字,遍历字符串:①若遇到数字则直接推入栈中;②若遇到乘除符号则取出栈顶元素,然后将它与乘除符号做运算后的结果数字推入栈中;③若遇到加减符号则将加减符号后的数字直接推入栈中(减号推入负数)。字符串遍历完成后,开始清栈大甩卖,把栈中所有的数字累加到sum,判断sum是否等于24,输出Yes或No即可。
#include <bits/stdc++.h>
using namespace std;
#define Up(i,a,b) for(int i = a; i <= b; i++)
int main()
{
ios::sync_with_stdio(false);
int n;
cin >> n;
cin.ignore();
while(n--)
{
stack<int> s; //用来存放数字
string str;
getline(cin,str);
Up(i,0,6)
{
if(isdigit(str[i])) //数字
{
s.push(str[i]-'0');
}
else if(str[i]=='x' || str[i]=='/') //乘除
{
int _ = s.top();
s.pop();
if(str[i] == 'x')
{
_ *= (str[++i]-'0');
}
else
{
_ /= (str[++i]-'0');
}
s.push(_);
}
else if(str[i]=='+' || str[i]=='-') //加减
{
if(str[i] == '+')
{
s.push(str[++i]-'0');
}
else
{
s.push(-(str[++i]-'0'));
}
}
}
int sum = 0;
while(!s.empty()) //清栈大甩卖
{
int _ = s.top();
sum += _;
s.pop();
}
printf("%s\n",sum==24 ? "Yes" : "No");
}
return 0;
}