题目描述
波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的波兰表示法为+ 2 3。
波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 + 3) * 4的波兰表示法为* + 2 3 4。
本题求解波兰表达式的值,其中运算符包括+ - * /四个。
输入格式
输入为一行,其中运算符和运算数之间都用空格分隔,运算数是浮点数。
输出格式
输出为一行,表达式的值。
可直接用printf("%f\n", v)输出表达式的值v。
输入输出样列
输入样例1:复制
* + 11.0 12.0 + 24.0 35.0
输出样例1:复制
1357.000000
说明
可使用atof(str)把字符串转换为一个double类型的浮点数。
atof定义在cstdlib中。
数据保证输入的运算符和运算数,总个数不超过10000个
【耗时限制】1000ms 【内存限制】64MB
#include<iostream>
#include<stdio.h>
#include<cmath>
#include<sstream>
#include<algorithm>
#include<cstring>
#include<stack>
#include<string>
#include<cstdio>
#include<vector>
#include<deque>
#include<queue>
using namespace std;
string s[10005];
stack <double> num;
void js(string op){
double l=num.top();num.pop();
double r=num.top();num.pop();
if(op=="+"){
num.push(l+r);
}
if(op=="-"){
num.push(l-r);
}
if(op=="*"){
num.push(l*r);
}
if(op=="/"){
num.push(l/r);
}
}
int main(){
int t=1;
while(cin>>s[t]){
t++;
}
t--;
for(int i=t;i>=1;i--){
if(s[i][0]>='0'&& s[i][0]<='9'){
double x;
stringstream sin;
sin<<s[i];
sin>>x;
num.push(x);
}
else{
js(s[i]);
}
}
printf("%f\n",num.top());
//cout<<num.top();
return 0;
}