#include<iostream>
#include<iomanip>
using namespace std
;
template<class T>
class List1
{
private:
T
*a1
;
int size
;
int a1size
;
public:
List1();
~List1();
T
top();
void push(T
);
void pop();
bool empty();
};
template<class T>
List1
<T
>::List1()
{
a1
= new T
[1000];
size
= 0;
a1size
= 1000;
}
template<class T>
List1
<T
>::~List1()
{
delete [] a1
;
}
template<class T>
T List1
<T
>::top()
{
return a1
[size
-1];
}
template<class T>
bool List1
<T
>::empty()
{
return size
==0;
}
template<class T>
void List1
<T
>::pop()
{
size
--;
}
template<class T>
void List1
<T
>::push(T b
)
{
if (size
>=(a1size
))
{
T
*a2
= new T
[2 * a1size
];
for (int i
= 0; i
< size
; i
++)
{
a2
[i
] = a1
[i
];
}
delete [] a1
;
a1
= a2
;
a1size
= 2 * a1size
;
}
else {
a1
[size
] = b
;
size
++;
}
}
int pro(char const x
)
{
switch (x
){
case '-':{
return 0;
break;
}
case '+':{
return 0;
break;
}
case '/':{
return 1;
break;
}
case '*':{
return 1;
break;
}
default:{
return -1;
break;
}
}
}
template<class T>
void compare(List1
<T
> &a1
,List1
<T
> &a2
,char ch
)
{
if(ch
=='+'||ch
=='-'||ch
=='*'||ch
=='/'||ch
=='('||ch
==')')
{
if(ch
=='(')
{
a2
.push(ch
);
return;
}
if(ch
==')')
{
while(a2
.top()!='(')
{a1
.push( a2
.top());
a2
.pop();}
if(a2
.top()=='(')
{
a2
.pop();
return;
}
}
if(!a2
.empty())
{
if(pro(ch
)<=pro(a2
.top()))
{
a1
.push(a2
.top());
a2
.pop();
compare(a1
,a2
,ch
);
}
else
{
a2
.push(ch
);
return;
}
}
else
{a2
.push(ch
);
}
}
if(ch
>=48&&ch
<=57)
{
a1
.push(ch
);
}
}
void fun()
{
List1
<char> a1
,a2
;
string a
;
cin
>>a
;
for(int i
=0;i
<a
.length();i
++)
{
compare(a1
,a2
,a
[i
]);
}
while(!a2
.empty())
{
a1
.push(a2
.top());
a2
.pop();
}
List1
<double> a3
;
while(!a1
.empty())
{
a2
.push(a1
.top());
a1
.pop();
}
while(!a2
.empty())
{
if(a2
.top()>=48&&a2
.top()<=57)
{
double c
= (double)a2
.top()-48.00;
a3
.push(c
);
a2
.pop() ;
}
else
{
double num
;
double num1
= a3
.top();
a3
.pop() ;
double num2
= a3
.top();
a3
.pop();
char aa
= a2
.top() ;
switch (aa
)
{
case '+':{
num
= num1
+num2
;
a3
.push(num
) ;
a2
.pop() ;
break;
}
case '-':{
num
= num2
-num1
;
a3
.push(num
);
a2
.pop();
break;
}
case '*':{
num
= num1
*num2
;
a3
.push(num
);
a2
.pop() ;
break;
}
case '/':{
num
= num2
/num1
;
a3
.push(num
);
a2
.pop() ;
break;
}
}
}
}
cout
<<setiosflags(ios
::fixed
)<<setprecision(2)<<a3
.top()<<endl
;
}
int main()
{
int a
;
cin
>>a
;
for(int i
=0;i
<a
;i
++)
{fun(); }
}
转载请注明原文地址: https://mac.8miu.com/read-490553.html