P1449 后缀表达式

考点

  • 模拟
  • 字符串

题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <bits/stdc++.h>
using namespace std;

int main()
{
int num = 0;
stack<int> st;
char chr;
while (cin >> chr && chr != '@')
{
if (chr == '.')
{
st.emplace(num);
num = 0;
}
else if (isdigit(chr))
{
num = num * 10 + chr - '0';
}
else
{
int b = st.top();
st.pop();
int a = st.top();
st.pop();
switch (chr)
{
case '+':
st.emplace(a + b);
break;
case '-':
st.emplace(a - b);
break;
case '*':
st.emplace(a * b);
break;
default:
st.emplace(a / b);
break;
}
}
}
cout << st.top();
return 0;
}

思路

字符串的题目,先考虑整串读入还是逐字符读入,很显然应该选择后者

注意点如下:

  • 数字有很多位,所以额外新建num变量记录每一位;如果遇到.就将这个数字塞入栈
  • 每个运算符都需要两个操作数。所以遇到操作符,就从栈里面弹出两个元素进行运算