分析:
阅读一个后缀表达式,从左往右读,一旦遇到运算符就往前取2个数(弹出栈),在用获得的运算符进行运算,并把结果压栈。需要注意的是,弹出时,后进的先出,所以第1个得到的操作数是操作符右侧的,第2个是操作符左侧的数字。
#include <cstdio>
#include <stack>
using namespace std;
stack<int> stk;
int s,x,y;//s由字符串转换得到的数字,x,y是由栈弹出的操作数
int main(){
char ch;
do{
ch=getchar();
if(ch>='0'&&ch<='9'){
s=s*10+ch-48;
}
else if(ch=='.'){
stk.push(s),s=0;
}
else if(ch!='@'){//不是@即是+-*/这几个操作符
//弹出时是倒序,故第1个是y,第2个是x
y=stk.top();stk.pop();x=stk.top();stk.pop();
switch(ch){//根据ch计算结果并压回栈内
case '+':stk.push(x+y);break;
case '-':stk.push(x-y);break;
case '*':stk.push(x*y);break;
case '/':stk.push(x/y);break;
}
}
}while(ch!='@');//不是@就循环
printf("%d\n",stk.top());//这时栈内应该只剩一个数了
return 0;
}