#include<iostream>
#include<cstdlib>
#include<stack>
#include<cstdio>
#include<cstring>
using namespace std;
char c[1005];
/*int Is(char c)
{
if(c=='+' || c=='-' || c=='*' || c=='/')
return 1;
else
return 0;
}
float cal(float x1,char c,float x2)
{
switch(c){
case'+':return x1+x2;break;
case'-':return x1-x2;break;
case'*':return x1*x2;break;
case'/':return x1/x2;break;
default: return 0;break;
}
}
float Eva(char c[],int n)
{
stack<char> a;
a.push('#');
stack<float> b;
float f,pf;
int j;
// cout<<c<<endl;
int flag = 0;
for(int i=0; c[i] != '\0'; ++i)
{
if(c[i] == 32) ++i;
if(Is(c[i]))
{
// cout<<c[i]<<endl;
a.push(c[i]);
flag = 0;
}
else
{
char num[30];
num[0] = '\0';
for(j=0; c[i] != 32 && c[i] != '\0'; j++)
{
num[j] = c[i];
++i;
}
if(c[i] == '\0')
--i;
num[j] = '\0';
// cout<<num<<endl;
f = atof(num);
b.push(f);
if(flag)
{
b.pop();
pf = b.top();
b.pop();
b.push(cal(pf,a.top(),f));
a.pop();
}
pf = b.top();
flag = 1;
}
}
while(a.top() != '#')
{
pf = b.top();
b.pop();
f = b.top();
b.pop();
b.push(cal(pf,a.top(),f));
a.pop();
}
return b.top();
}*/
/*注释的是自己写的代码,提交就是不能AC可能是有没有考虑到的情况吧,下边的代码是参考别人的,递归用的非常好,也非常妙!还有就是又学习到了一个函数sscanf(c,"%s",ch);把字符数组里的字符复制到ch中,到空格为止!*/
float Eva()
{
char ch[20];
sscanf(c,"%s",ch);
int len = strlen(ch);
strcpy(c,c+len+1);
switch(ch[0])
{
case'+':return Eva()+Eva();
case'-':return Eva()-Eva();
case'*':return Eva()*Eva();
case'/':return Eva()/Eva();
default:return atof(ch);
}
}
int main()
{
// freopen("in.txt","r",stdin);
while(gets(c))
printf("%.2f\n",Eva());
return 0;
}