题目
后缀表达式,又称逆波兰式,指的是不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则)。例如,1 2 3 + -,它等价于1-(2+3)。
现给定一条后缀表达式,请求出后缀表达式的计算结果。
代码
思路在代码里
#include <bits/stdc++.h>
using namespace std;
stack<double>num;//操作数栈
int main(){
string s;
int x;
while(cin>>s){
if(s[0]>='0'&&s[0]<='9'){//数字
stringstream sin;
sin<<s;
sin>>x;
//上面三行是字符串转数字
num.push(double(x));//可能出现小数
}
else{//符号,取栈顶2个数计算
double a,b;
b=num.top();
num.pop();
a=num.top();
num.pop();
if(s[0]=='+')num.push(a+b);
if(s[0]=='-')num.push(a-b);
if(s[0]=='*')num.push(a*b);
if(s[0]=='/')num.push(a/b);
}
}
cout<<fixed<<setprecision(3)<<num.top();
return 0;
}