首页 > 代码库 > 洛谷 P1449 后缀表达式 Label:表达式计算系列
洛谷 P1449 后缀表达式 Label:表达式计算系列
题目描述
所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。
如:3*(5–2)+7对应的后缀表达式为:3.5.2.-*7.+@。’@’为表达式的结束符号。‘.’为操作数的结束符号。
输入输出格式
输入格式:
输入:后缀表达式
输出格式:
输出:表达式的值
输入输出样例
输入样例#1:
3.5.2.-*7.+@
输出样例#1:
16
说明
字符串长度,1000内。
代码
View Code1 #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 }
参见这里
http://www.cnblogs.com/radiumlrb/p/5759319.html
洛谷 P1449 后缀表达式 Label:表达式计算系列
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。