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

Posted Radiumlrb

tags:

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

题目描述

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

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

输入输出格式

输入格式:

 

输入:后缀表达式

 

输出格式:

 

输出:表达式的值

 

输入输出样例

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

说明

字符串长度,1000内。

代码


 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<algorithm>
 5 #define ll long long 
 6 using namespace std;
 7 ll num[1005];
 8 string str;
 9 
10 void cul(ll p,ll op){
11     if(op==0) num[p-1]=num[p-1]+num[p];
12     if(op==1) num[p-1]=num[p-1]-num[p];
13     if(op==2) num[p-1]=num[p-1]*num[p];
14     if(op==3) num[p-1]=num[p-1]/num[p];
15 }
16 
17 ll result(){
18     ll op_nxt;
19     ll len=str.length(),p=-1;
20     ll num_nxt=0;
21     for(int i=0;i<len;i++){
22         if(str[i]>=\'0\'&&str[i]<=\'9\') num_nxt=num_nxt*10+(str[i]-\'0\');
23         else if(str[i]==\'.\'){
24             num[++p]=num_nxt;
25             num_nxt=0;
26         }
27         else{
28             
29             if(str[i]==\'+\') op_nxt=0;
30             if(str[i]==\'-\') op_nxt=1;
31             if(str[i]==\'*\') op_nxt=2;
32             if(str[i]==\'/\') op_nxt=3;
33             
34             cul(p--,op_nxt);
35         }
36     }
37     return num[0];
38 }
39 int main(){
40 //    freopen("01.in","r",stdin);
41     cin>>str;
42     printf("%lld\\n",result());
43     return 0;
44 }
View Code

 

参见这里

http://www.cnblogs.com/radiumlrb/p/5759319.html

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

洛谷 P1449 后缀表达式

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

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

洛谷 P1449 后缀表达式 题解

栈洛谷P1449 后缀表达式

[题解]P1449 后缀表达式