Code: Select all
/*
Problem: 12803 - Arithmetic Expressions
Algorithm: Stack
*/
#include<bits/stdc++.h>
using namespace std;
#define LL long long
int main()
{
int i,j,k,n,m,d,test;
scanf("%d",&test);
getchar();
while(test--)
{
string s,p;
getline(cin,s);
stringstream ss;
ss<<s;
stack<string>st;
while(ss>>p)
{
if(p==")")
{
string tmp1=st.top();
st.pop();
stringstream sss;
sss<<tmp1;
double num1;
sss>>num1;
string br=st.top();
st.pop();
string tmp2=st.top();
st.pop();
sss.clear();
sss<<tmp2;
double num2;
sss>>num2;
st.pop();
double val;
if(br=="+") val=num2+num1;
else if(br=="-") val=num2-num1;
else if(br=="*") val=num2*num1;
else val=num2/num1;
// nearest is the two decimal places of val. if val=3.77777, then nearest=3.78
double nearest = roundf(val * 100.0) / 100.0;
string ins;
sss.clear();
sss<<nearest;
sss>>ins;
st.push(ins);
}
else st.push(p);
}
string gg=st.top();
ss.clear();
double ans;
ss<<gg;
ss>>ans;
printf("%.2lf\n",ans);
}
return 0;
}