【洛谷】P1449 后缀表达式

P1449 后缀表达式

分析:

简单的模拟题。

熟练容器stack的话很容易解决。

stack,栈,有先进后出的特性。

比如你有一个箱子,你每放进第一个数时,就往箱底放,放第二个数时就在第一个数的上面放,而这两个数取出时,先取出第二个数,才能取出第一个数。

详细请看代码

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<stack> // 头文件
 4 using namespace std;
 5 
 6 char c;
 7 stack<int> q; // 声明
 8 
 9 int main()
10 {
11     int n = 1, num;
12     while((c = getchar()) && c != '@'){ // 输入,以 @ 结束
13         // 对数字的处理,
14         if(c >= '0' && c <= '9'){
15             num = c - '0';
16             if(n != 1) {
17                 num += q.top() * n; // .top() q 最后放入的数
18                 q.pop();        // .pop() 去掉 q 最后放入的数
19                 q.push(num);    // .push(x) 往 q 放进一个数
20             }
21             else {
22                 q.push(num);
23                 n = 10; // 处理一下数字
24             }
25         }
26         if(c == '.'){ // 输入一个数字完毕,归个位
27             n = 1;
28         }
29 
30         // 判断运算符
31         int a, b;
32         if(c == '+'){
33             a = q.top(); q.pop();
34             b = q.top(); q.pop();
35             a += b;
36             q.push(a);
37         }
38         if(c == '-'){ // 注意被减数与减数
39             a = q.top(); q.pop();
40             b = q.top(); q.pop();
41             b -= a;
42             q.push(b);
43         }
44         if(c == '*'){
45             a = q.top(); q.pop();
46             b = q.top(); q.pop();
47             a *= b;
48             q.push(a);
49         }
50         if(c == '/'){ // 注意被除数与除数
51             a = q.top(); q.pop();
52             b = q.top(); q.pop();
53             b /= a;
54             q.push(b);
55         }
56     }
57     cout << q.top() << endl; // 输出
58     return 0;
59 }
AC代码
原文地址:https://www.cnblogs.com/Ayanowww/p/10858754.html