题目
思路
考察了中缀表达式的计算,这属于stack栈的一种运用,具体见stack的笔记。
这里有两种做法。
方法1:针对题目里的简单四则运算无括号,可以先把所有操作符看成加法,遇到不同的操作符取出栈顶数字进行计算再进栈,最后累加。(也就是简单化 中缀转后缀,直接计算)
方法2:先把中缀表达式转为后缀表达式,再计算后缀表达式
代码
方法1:
stack<int> num;//操作符栈
int main(){
char str[14];
int n;
cin>>n;
while(n--){
cin>>str;
int i=0;
while(!num.empty()){
num.pop();//清空栈
}
while(i<strlen(str)){
if(isdigit(str[i])){
//如果为0-9的数
num.push(str[i]-'0');//把字符‘数字’变为int 数字
i++;
}else{
if(str[i] =='+'){
i++;//加法跳过
}else if(str[i]=='-'){
i++;
num.push((str[i]-'0')*-1);
i++;
} else if(str[i]=='x'){
int temp =num.top();
num.pop();
i++;
num.push((str[i]-'0')*temp);
i++;
}else if(str[i]=='/'){
int temp =num.top();
num.pop();
i++;
num.push(temp/(str[i]-'0'));
i++;
}
}
}
int sum =0;
while (!num.empty())
{
sum += num.top();
num.pop();
}
if (sum == 24)
cout << "Yes" << endl;
else
cout << "No" << endl;
}
return 0;
}