目录
牛客_Emacs计算器(逆波兰表达式)
解析代码
逆波兰表达式(后缀表达式)求值,需要借助栈,思路:
循环输入,获取逆波兰表达式,然后进行以下补助,直到测试完所有的测试用例:
- 遇到数字字符串,将该数字字符串转化为数字然后入栈。
- 遇到操作符时,从栈顶取两个数字,然后进行该运算符所对应运算,完成好将结果入栈,注意:先取到的数字为运算符的右操作数。
- 继续1和2,直到处理完所有的字符串,最终栈顶元素即为所要结果。
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main()
{
int n = 0;
while(cin >> n)
{
stack<int> st;
string str;
for(int i = 0; i < n; ++i)
{
cin >> str;
if(str == "+" || str == "-" || str == "*" || str == "/")
{
int right = st.top(); // 先右,再左
st.pop();
int left = st.top();
st.pop();
switch(str[0])
{
case '+':
st.push(left + right);
break;
case '-':
st.push(left - right);
break;
case '*':
st.push(left * right);
break;
case '/':
st.push(left / right);
break;
}
}
else
{
st.push(atoi(str.c_str()));
}
}
cout << st.top() << endl;
}
return 0;
}