19009 后缀表达式
Description
人最熟悉的是中缀表达式,但计算机比较难处理中缀表达式,所以往往将中缀表达式改为后缀表达式。
后缀表达式,又称逆波兰式。现在从键盘读入一个后缀表达式,只含有0-9组成的运算数及加(+)、减(—)、乘(*)、除(/)四种运算符。
每个运算数之间用一个空格隔开,题目所使用的运算数均小于10,并确保所给的表达式合法。以@作为结束标志。
输入格式
一个后缀表达式。
输出格式
表达式结果。
输入样例
6 9 4 3 +*-@
输出样例
-57
#include <stdio.h>
#include <iostream>
#include <vector>
#include <algorithm>
#include <string.h>
#include <stack>
using namespace std;
stack<int> S;//定义一个堆栈
int main()
{
char c;//输入字符串
int i = 0;
int ans,a,b;
while((c = getchar()) != '@'){
if(c <= '9' && c >= '0'){ //左括号
S.push(c - 48);//把运算数char型转为int,压栈
}
else if(c == '+' || c == '-' || c == '*' || c == '/'){//弹出两位运算数
b = S.top();
S.pop();
a = S.top();
S.pop();
switch(c)
{
case '+' : ans = a + b; break;
case '-' : ans = a - b; break;
case '*' : ans = a * b; break;
case '/' : ans = a / b; break;
}
S.push(ans);//运算结果再次入栈
}
}
int res = S.top();
printf("%d",res);
return 0;
}