#include<iostream>
#include<iomanip>
#include<string>
using namespace std;
template <class T>
class sqstack
{
T *base;
int top;
int size;
public:
void push(T x);
T gettop();
T pop();
sqstack(int m);
~ sqstack(){delete [] base;top=0;size=0;}
int isp(char);
int icp(char);
friend void cal1(char *exp,char *postexp,int sum);
};
template <class T>
sqstack<T>::sqstack (int m)
{
if(base==NULL)
{
cout<<"fail"<<endl;
exit(1);
}
base=new T[m];
size=m;
top=-1;
}
template<class T>
void sqstack<T>::push(T x)
{
if(top==size-1)
throw "zhanman,fail";
top++;
base[top]=x;
}
template <class T>
T sqstack<T>::pop()
{
T x;
x=base[top--];
return x;
}
template<class T>
T sqstack<T>::gettop ()
{
return base[top];
}
int isp(char ch3)
{
switch(ch3)
{
case '#':return 0;break;
case'(':return 1;break;
case'*':
case'/':return 5;break;
case'+':
case'-':return 3;break;
case')':return 6;break;
default :return 0;break;
}
}
int icp(char ch4)
{
switch(ch4)
{
case '#':return 0;break;
case'(':return 6;break;
case'*':
case'/':return 4;break;
case'+':
case'-':return 2;break;
case')':return 1;break;
default :return 0;break;
}
}
int in(char t)
{
switch(t)
{
case')':
case'(':
case'+':
case'-':
case'*':
case'/':
case'#':return 1;
default:return 0;
}
}
double operate(double a,char t,double b)
{
switch(t)
{
case'+':return (a+b);break;
case'-':return(a-b);break;
case'/':return (a/b);break;
case'*':return (a*b);break;
default:return 0;break;
}
}
void cal1(char *exp,char *postexp,int sum)
{
char c;
char x='@';
sqstack<char>op(50);
int i=0;
op.push('#');
c=*exp++;
while(c)
{
if((c>='0'&&c<='9')||c=='.')
{
postexp[i++]=c;
c=*exp++;
}
if(in(c))
{
postexp[i++]=' ';
x=op.gettop();
if(isp(x)<icp(c))
{
op.push (c);
c=*exp++;
}
else if(isp(x)>icp(c))
{
postexp[i++]=op.pop ();
}
else
{
if(x=='(')
{
op.pop();
c=*exp++;
i--;
}
}
postexp[i]='\0';
}
if(x=='#'&&c=='#')
break;
}
}
double cal2(char *postexp)
{
int i;
sqstack<float>oz(50);
char z[50];
double v=0,d=0,a,b;
char c;
c=*postexp++;
while(c!='\0')
{
if((c>='0'&&c<='9')||c=='.')
{
i=0;
do
{
z[i++]=c;
c=*postexp++;
}while((c>='0'&&c<='9')||c=='.');
z[i]='\0';
d=atof(z);
oz.push(d);
}
if(in(c))
{
b=oz.pop();
a=oz.pop();
oz.push(operate(a,c,b));
c=*postexp++;
}
c=*postexp++;
}
v=oz.pop();
return v;
}
int main()
{
int sum,i;
double s;
char str[201];
while(cin.getline(str,201,'\n'))
{
char exp[201]={'0'};
char postexp[402]={'0'};
for(i=0;i<strlen(str);i++)
{
if(str[i] != '0')
break;
}
if (i == strlen(str))
break;
for(int i=0,j=0;i<strlen (str);i++,j++)
{
if(str[i]!=' ')
exp[j]=str[i];
else
j--;
}
*postexp='\0';
sum=strlen(exp);
exp[sum]='#';
cal1(exp,postexp,sum);
s=cal2(postexp);
cout<<setiosflags(ios::fixed);
cout<<setprecision(2)<<s<<endl;
//memset(exp,'0',sizeof(exp));
memset(str,'0',sizeof(str));
//memset(postexp,'0',sizeof(postexp));
}
return 0;
}
#include<iomanip>
#include<string>
using namespace std;
template <class T>
class sqstack
{
T *base;
int top;
int size;
public:
void push(T x);
T gettop();
T pop();
sqstack(int m);
~ sqstack(){delete [] base;top=0;size=0;}
int isp(char);
int icp(char);
friend void cal1(char *exp,char *postexp,int sum);
};
template <class T>
sqstack<T>::sqstack (int m)
{
if(base==NULL)
{
cout<<"fail"<<endl;
exit(1);
}
base=new T[m];
size=m;
top=-1;
}
template<class T>
void sqstack<T>::push(T x)
{
if(top==size-1)
throw "zhanman,fail";
top++;
base[top]=x;
}
template <class T>
T sqstack<T>::pop()
{
T x;
x=base[top--];
return x;
}
template<class T>
T sqstack<T>::gettop ()
{
return base[top];
}
int isp(char ch3)
{
switch(ch3)
{
case '#':return 0;break;
case'(':return 1;break;
case'*':
case'/':return 5;break;
case'+':
case'-':return 3;break;
case')':return 6;break;
default :return 0;break;
}
}
int icp(char ch4)
{
switch(ch4)
{
case '#':return 0;break;
case'(':return 6;break;
case'*':
case'/':return 4;break;
case'+':
case'-':return 2;break;
case')':return 1;break;
default :return 0;break;
}
}
int in(char t)
{
switch(t)
{
case')':
case'(':
case'+':
case'-':
case'*':
case'/':
case'#':return 1;
default:return 0;
}
}
double operate(double a,char t,double b)
{
switch(t)
{
case'+':return (a+b);break;
case'-':return(a-b);break;
case'/':return (a/b);break;
case'*':return (a*b);break;
default:return 0;break;
}
}
void cal1(char *exp,char *postexp,int sum)
{
char c;
char x='@';
sqstack<char>op(50);
int i=0;
op.push('#');
c=*exp++;
while(c)
{
if((c>='0'&&c<='9')||c=='.')
{
postexp[i++]=c;
c=*exp++;
}
if(in(c))
{
postexp[i++]=' ';
x=op.gettop();
if(isp(x)<icp(c))
{
op.push (c);
c=*exp++;
}
else if(isp(x)>icp(c))
{
postexp[i++]=op.pop ();
}
else
{
if(x=='(')
{
op.pop();
c=*exp++;
i--;
}
}
postexp[i]='\0';
}
if(x=='#'&&c=='#')
break;
}
}
double cal2(char *postexp)
{
int i;
sqstack<float>oz(50);
char z[50];
double v=0,d=0,a,b;
char c;
c=*postexp++;
while(c!='\0')
{
if((c>='0'&&c<='9')||c=='.')
{
i=0;
do
{
z[i++]=c;
c=*postexp++;
}while((c>='0'&&c<='9')||c=='.');
z[i]='\0';
d=atof(z);
oz.push(d);
}
if(in(c))
{
b=oz.pop();
a=oz.pop();
oz.push(operate(a,c,b));
c=*postexp++;
}
c=*postexp++;
}
v=oz.pop();
return v;
}
int main()
{
int sum,i;
double s;
char str[201];
while(cin.getline(str,201,'\n'))
{
char exp[201]={'0'};
char postexp[402]={'0'};
for(i=0;i<strlen(str);i++)
{
if(str[i] != '0')
break;
}
if (i == strlen(str))
break;
for(int i=0,j=0;i<strlen (str);i++,j++)
{
if(str[i]!=' ')
exp[j]=str[i];
else
j--;
}
*postexp='\0';
sum=strlen(exp);
exp[sum]='#';
cal1(exp,postexp,sum);
s=cal2(postexp);
cout<<setiosflags(ios::fixed);
cout<<setprecision(2)<<s<<endl;
//memset(exp,'0',sizeof(exp));
memset(str,'0',sizeof(str));
//memset(postexp,'0',sizeof(postexp));
}
return 0;
}
