这个题主要用栈进行求解
这里用到几个函数:弹栈pop 弹出栈顶元素top 入栈push 判断栈是否为空empty
思路是:用一个栈存放输入的数字,如果有乘法或者除法则放入运算的结果,遇到减号放入这个数的相反数
总之最后栈中存放的每个元素之和就是我们运算的结果
eg:9+3+3x4
放入9,放入3,放入3,遇到乘号,弹出3,放入3x4=12
最后栈中是9,3,12
结果为9+3+12=24
代码如下:(c++)
#include <iostream>
#include <stack>
#include <cctype>
using namespace std;
int reverse(int m)
{
return (0-m);
}
int main( )
{
stack<int> num;
int n;
cin>>n;cin.get();
string ch;
while(n--)
{
cin>>ch;
for(int i=0;i<7;i++)
{
if(isdigit(ch[i]))//是数字
{
num.push(ch[i]-'0');
}
else if(ch[i]=='x'||ch[i]=='/')
{
int temp=num.top();
num.pop();
if(ch[i]=='x')
temp*=(ch[++i]-'0');
else if(ch[i]=='/')
temp/=(ch[++i]-'0');
num.push(temp);
}
else if(ch[i]=='+'||ch[i]=='-')
{
if(ch[i]=='+')
num.push(ch[++i]-'0');
else
num.push(reverse(ch[++i]-'0'));
}
}
int result=0;
while(!num.empty())//栈不为空时
{
int temp=num.top();
result+=temp;
num.pop();
}
if(result==24)
cout<<"Yes";
else
cout<<"No";
cout<<endl;
}
return 0;
}