后缀表达式
题目描述
所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。
如:
3*(5-2)+7
\texttt{3*(5-2)+7}
3*(5-2)+7 对应的后缀表达式为:
3.5.2.-*7.+@
\texttt{3.5.2.-*7.+@}
3.5.2.-*7.+@。在该式中,@
为表达式的结束符号。.
为操作数的结束符号。
输入格式
输入一行一个字符串 s s s,表示后缀表达式。
输出格式
输出一个整数,表示表达式的值。
样例 #1
样例输入 #1
3.5.2.-*7.+@
样例输出 #1
16
提示
数据保证, 1 ≤ ∣ s ∣ ≤ 50 1 \leq |s| \leq 50 1≤∣s∣≤50,答案和计算过程中的每一个值的绝对值不超过 1 0 9 10^9 109。
题解如下
#include<iostream>
#include<stack>
#include<cstring>
using namespace std;
int main(){
stack<int>n;
char ch;
int s = 0;
int x,y;
do{
ch = getchar();
if(ch>='0'&&ch<='9')
s= s* 10+ch-'0';
else if(ch=='.'){
n.push(s);s=0;
}
else if(ch!='@'){
x=n.top();n.pop();y=n.top();n.pop();
switch(ch){
case '+': n.push(x+y);break;
case '-': n.push(y-x);break;
case '*': n.push(x*y);break;
case '/': n.push(y/x);break;
}
}
}while(ch!='@');
cout<<n.top()<<endl;
}