https://www.luogu.org/problem/P1449
题目描述
所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。
如:3*(5–2)+7对应的后缀表达式为:3.5.2.-*7.+@。’@’为表达式的结束符号。‘.’为操作数的结束符号。
输入格式
输入:后缀表达式
输出格式
输出:表达式的值
输入输出样例
输入 #1
3.5.2.-*7.+@
输出 #1
16
说明/提示
字符串长度,1000内。
代码
#include<iostream>
#include<cstdio>
using namespace std;
long long stk[1000];
int main()
{
long long i=0,now=0;
char c;
while((c=getchar())!='@')
{
if(c>='0'&&c<='9')
now*=10,now+=c-'0';
else if(c=='.')
{
stk[++i]=now;
now=0;
}
else if(c=='+')
{
stk[i-1]=stk[i-1]+stk[i];
stk[i]=0;
i--;
}
else if(c=='-')
{
stk[i-1]=stk[i-1]-stk[i];
stk[i]=0;
i--;
}
else if(c=='*')
{
stk[i-1]=stk[i-1]*stk[i];
stk[i]=0;
i--;
}
else if(c=='/')
{
stk[i-1]=stk[i-1]/stk[i];
stk[i]=0;
i--;
}
}
cout<<stk[1];
return 0;
}