洛谷P1449——后缀表达式(栈模拟)

题目描述

所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。

如:3*(5–2)+7对应的后缀表达式为:3.5.2.-*7.+@。’@’为表达式的结束符号。‘.’为操作数的结束符号。

输入输出格式

输入格式:

输入:后缀表达式

输出格式:

输出:表达式的值

输入输出样例

输入样例#1:
3.5.2.-*7.+@
输出样例#1:
16

说明

字符串长度,1000内。

只要用STL stack就可以了

遇到数字就记下来,遇到点号就把当前数字压栈

遇到操作符就从栈顶取两个数字进行运算

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<iostream>
 4 #include<stack>
 5 #include<cstring>
 6 using namespace std;
 7 char s[1010];
 8 stack<int> st;
 9 int main()
10 {
11     int tmp=0,t;
12     gets(s);
13     int len=strlen(s);
14     for (int i=0;i<len-1;i++) {
15         if (s[i]>='0' && s[i]<='9') {
16             tmp=tmp*10+s[i]-'0';
17         }
18         else {
19             if (s[i]=='.') {
20                 st.push(tmp);
21                 tmp=0;
22             }
23             else {
24                 int x,y;
25                 x=st.top(); st.pop();
26                 y=st.top(); st.pop();
27                 switch (s[i]) {
28                     case '+' : {
29                         t=y+x;
30                         st.push(t);
31                         break;
32                     }
33                     case '-' : {
34                         t=y-x;
35                         st.push(t);
36                         break;
37                     }
38                     case '*' : {
39                         t=y*x;
40                         st.push(t);
41                         break;
42                     }
43                     case '/' : {
44                         t=y/x;
45                         st.push(t);
46                         break;
47                     }
48                 }
49             }
50         }
51     }
52     printf("%d\n",st.top());
53     return 0;
54 }

 

posted @ 2017-03-14 22:40  饼饼饼饼饼  阅读(236)  评论(0编辑  收藏  举报