#include <iostream>
#include <stack>
using namespace std;
class strategy{
public:
virtual double DoOperations(double a,double b)=0;
};
class pluss: public strategy{
public:
double DoOperations(double a,double b)
{
return a+b;
}
};
class minuss: public strategy{
public:
double DoOperations(double a,double b)
{
return a-b;
};
};
class dablepluss: public strategy{
public:
double DoOperations(double a,double b)
{
return a*b;
};
};
class del: public strategy{
public:
double DoOperations(double a,double b)
{
return a/b;
};
};
class calcul{
strategy* strategia = NULL;
public:
double execute(double a,double b)
{if(strategia==NULL)
return 0;
return strategia->DoOperations(a,b);
}
void setStrat(strategy* strategia)
{
this->strategia = strategia;
}
};
class Lecsema
{
public:
char type;
double num;
};
int getrang(char ch)
{if(ch=='+' && ch =='-' )
return 1;
if(ch=='*' && ch =='/' )
return 2;
return 0;
}
void Maths(stack<Lecsema>&numbers,stack<Lecsema>&znak,Lecsema item)
{
double a,b,c;
calcul cal;
switch (znak.top().type)
{
case '+':
a=numbers.top().num;
numbers.pop();
b=numbers.top().num;
numbers.pop();
cal.setStrat(new pluss());
c=cal.execute(a,b);
item.num=c;
item.type='0';
numbers.push(item);
znak.pop();
break;
case '-':
a=numbers.top().num;
numbers.pop();
b=numbers.top().num;
numbers.pop();
cal.setStrat(new minuss());
c=cal.execute(b,a);
item.num=c;
item.type='0';
numbers.push(item);
znak.pop();
break;
case '*':
a=numbers.top().num;
numbers.pop();
b=numbers.top().num;
numbers.pop();
cal.setStrat(new dablepluss());
c=cal.execute(b,a);
item.num=c;
item.type='0';
numbers.push(item);
znak.pop();
break;
case '/':
a=numbers.top().num;
numbers.pop();
b=numbers.top().num;
numbers.pop();
cal.setStrat(new del());
c=cal.execute(b,a);
item.num=c;
item.type='0';
numbers.push(item);
znak.pop();
break;
}
};
int main()
{
double num;
char ch;
stack<Lecsema>numbers;
stack<Lecsema>znak;
Lecsema item;
while(1){
ch=cin.peek();
if(ch=='\n')
{break;}
if(ch>='0' && ch<='9' )
{
cin>>num;
item.type='0';
item.num=num;
numbers.push(item);
continue;
}
if(ch=='+'|| ch=='-' || ch=='*' || ch=='/')
{if(znak.size() ==0 )
{
item.type=ch;
item.num=0;
znak.push(item);
cin.ignore();
continue;
}
if(znak.size() !=0 && getrang(ch) > getrang(znak.top().type))
{
item.type=ch;
item.num=0;
znak.push(item);
cin.ignore();
continue;
}
if(znak.size() !=0 && getrang(ch) <= getrang(znak.top().type))
{
Maths(numbers,znak,item);
continue;
}
}
/////////////////////
if(ch=='(')
{item.type=ch;
item.num=0;
znak.push(item);
cin.ignore();
continue;
}
if(ch==')')
{while(znak.top().type != '(')
{
Maths(numbers,znak,item);
}
znak.pop();
cin.ignore();
continue;
}
////////////////////////////
}
while(znak.size() !=0 ){
Maths(numbers,znak,item);
}
cout<<numbers.top().num;
return 0;
}