题目
题目分析及算法原理
逆波兰表达式又被称为后缀表达式,想要弄清楚题目意思,首先就要明白什么是后缀表达式。它的核心原理就是把操作符放在两个操作数的后面。想要求出逆波兰表达式的值,我们需要利用栈来模拟整个流程。遇到数,就直接进栈;遇到操作符,弹出两个栈顶元素,计算之后再放入栈中。由于题目中每个数字之间用 '.' 来分隔,并且以 ‘@’ 作为结束标志,所以我们一个字符一个字符的读入。这里需要注意一个细节,比如我们把129这个数字当成一个字符串来看的时候,如何通过遍历字符1、字符2和字符9把这个数字还原出来?我们先定义一个变量num,让其初始化为0,当遍历到1的时候,让 num = 0×10 + 1,此时num值为1,当遍历2的时候,再让num = 1 × 10 + 2,同理操作下去就可以让num = 129。
参考代码
#include <iostream>
#include <stack>
using namespace std;
int main()
{
stack<int> st;
int num = 0;
char ch = 0;
while(cin >> ch)
{
if(ch == '@')
{
break;
}
else if(ch >= '0' && ch <= '9')
{
num = num * 10 + ch - '0';
}
else if(ch == '.')
{
st.push(num);
num = 0;
}
else
{
int b = st.top();
st.pop();
int a = st.top();
st.pop();
if(ch == '+')
{
st.push(a + b);
}
else if(ch == '-')
{
st.push(a - b);
}
else if(ch == '*')
{
st.push(a * b);
}
else
{
st.push(a / b);
}
}
}
cout << st.top() << endl;
return 0;
}