//stack应用:表达式求值
//无括号四则运算通用模版
#include <iostream>
#include <cctype>//isdigit(str[index])
#include <stack>
using namespace std;
double GetNumber(string str,int& index)
{
double number=0;
while(isdigit(str[index]))
{
number=number*10+str[index]-'0';
index++;
}
return number;
}
int Prior(char op)
{
if(op=='#')return 0;
else if(op=='$')return 1;
else if(op=='+'||op=='-')return 2;
else return 3;
}
double Calculate(double x,double y,char op)
{
double result=0;
if(op=='+')result=x+y;
else if(op=='-')result=x-y;
else if(op=='*')result=x*y;
else result=x/y;
return result;
}
int main() {
string str;
while (getline(cin,str)) {
if(str==" ")break;
int index=0;
stack<double> num;
stack<char> oper;
oper.push('#');//优先级最小
str+='$';///有必要 因为当栈内剩下最后一个+/*-运算符时,需要$来将其预算掉
while(index<str.size())
{
if(isdigit(str[index]))
{
num.push(GetNumber(str,index));
}
else if(Prior(oper.top())<Prior(str[index]))
{
oper.push(str[index]);
index++;
}
else {
double y=num.top();
num.pop();
double x=num.top();
num.pop();
num.push(Calculate(x,y,oper.top()));
oper.pop();
}
}
cout<<num.top()<<endl;
}
}