洛谷 P1449 后缀表达式 题解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷 P1449 后缀表达式 题解相关的知识,希望对你有一定的参考价值。

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置。

题目链接:https://www.luogu.org/problem/show?pid=1449

题目描述

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

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

输入输出格式

输入格式:

输入:后缀表达式

输出格式:

输出:表达式的值

输入输出样例

输入样例#1:
3.5.2.-*[email protected]
输出样例#1:
16

说明

字符串长度,1000内。

 

分析:

后缀表达式求法:

从左往右扫描表达式,遇到数字则入栈,遇到运算符则弹出栈顶的两个数进行运算(如果是减法/除法,要用后出栈的减去/除以先出栈的),再把运算结果入栈。

这样求完之后栈内的元素就是表达式的运算结果。

 

AC代码:

 1 #include<iostream>
 2 #include<cmath>
 3 #include<algorithm>
 4 #include<cstdio>
 5 #include<cstring>
 6 #include<stack>
 7 
 8 char line[1005];
 9 std::stack <int> s;
10 
11 int main()
12 {
13     scanf("%s",line);
14     int len = strlen(line)-1;
15     //-1是为了忽略结尾的@,这种读取方式不需要使用@中止 
16     int a,b,tmp = 0;
17     for(int i = 0;i <= len;++ i)
18     {
19         if(line[i] >= 0 && line[i] <= 9)
20         {
21             tmp = tmp*10+line[i]-0;
22             continue;
23         }
24         if(tmp)
25             s.push(tmp);
26         tmp = 0;
27         if(line[i] == .)
28             continue;
29         else if(line[i] == +)
30         {
31             a = s.top();s.pop();
32             b = s.top();s.pop();
33             s.push(a+b);
34         }
35         else if(line[i] == -)
36         {
37             a = s.top();s.pop();
38             b = s.top();s.pop();
39             s.push(b-a);
40         }
41         else if(line[i] == *)
42         {
43             a = s.top();s.pop();
44             b = s.top();s.pop();
45             s.push(a*b);
46         }
47         else if(line[i] == /)
48         {
49             a = s.top();s.pop();
50             b = s.top();s.pop();
51             s.push(b/a);
52         }
53     }
54     int ans = s.top();
55     printf("%d\n",ans);
56     return 0;
57 }

 

 

 

 

 

 

 

以上是关于洛谷 P1449 后缀表达式 题解的主要内容,如果未能解决你的问题,请参考以下文章

洛谷 P1449 后缀表达式

洛谷P1449 后缀表达式 栈 模拟 字符串

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

栈洛谷P1449 后缀表达式

[题解]P1449 后缀表达式

洛谷 P1449 后缀表达式 Label:表达式计算系列