题目
![]() ![]() |
|---|
思路
考察了中缀表达式的计算,这属于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;elsecout << "No" << endl;}return 0;}


