2909: 计算后缀表达式的值
题目描述
所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。
如:3*(5–2)+7对应的后缀表达式为:3.5.2.-*7.+@。’@’为表达式的结束符号。‘.’为操作数的结束符号。
3.5.2.-*7.+@
=3.3.*7.+@
=9.7.+@
=16
输入:后缀表达式
输出:表达式的值
样例:
输入:
3.5.2.-*7.+@
输出:
16
#include<cmath>
#include<cstdio>
#include<cstring>
using namespace std;
char c;
int st[21000],tp;
int main()
{
while(1)
{
scanf("%c",&c);
if(c=='@')
{
printf("%d",st[1]);
return 0;
}
if(c>='0' && c<='9')
{
char sz;
tp++;
st[tp]=c-48;
while(1)
{
scanf("%c",&sz);
if(sz=='.') break;
else st[tp]=st[tp]*10+sz-48;
}
}
else
{
tp--;
if(c=='+') st[tp]+=st[tp+1];
if(c=='-') st[tp]-=st[tp+1];
if(c=='*') st[tp]*=st[tp+1];
if(c=='/') st[tp]/=st[tp+1];
}
}
return 0;
}