#include <iostream>
using namespace std;
char a[7][7] = {
{'>','>','<','<','<','>','>'},
{'>','>','<','<','<','>','>'},
{'>','>','>','>','<','>','>'},
{'>','>','>','>','<','>','>'},
{'<','<','<','<','<','=',' '},
{'>','>','>','>',' ','>','>'},
{'<','<','<','<','<',' ','='}
};
char fh[7] = { '+','-','*','/','(',')','#' };
class Zhan1 //符号
{
public:
char data[100];
int top;
Zhan1() { top = -1; }
char Gettop() //获取符号栈栈顶元素
{
return data[top];
}
void Push(char x) //符号栈进栈
{
top++;
data[top] = x;
}
char Pop(char x) //符号栈出栈
{
x = data[top--];
return x;
}
};
class Zhan2 //数字
{
public:
char data[100];
int top;
Zhan2() { top = -1; }
double Gettop() //获取数字栈栈顶元素
{
return data[top];
}
void Push(char x) //数字栈进栈
{
top++;
data[top] = x;
}
char Pop(char x) //数字栈出栈
{
x = data[top--];
return x;
}
};
char Ysj(char c1, char c2) //优先级比较
{
int i=0, j=0;
switch (c1)
{
case'+':i = 0;
break;
case'-':i = 1;
break;
case'*':i = 2;
break;
case'/':i = 3;
break;
case'(':i = 4;
break;
case')':i = 5;
break;
case'#':i = 6;
break;
}
switch (c2)
{
case'+':j = 0;
break;
case'-':j = 1;
break;
case'*':j = 2;
break;
case'/':j = 3;
break;
case'(':j = 4;
break;
case')':j = 5;
break;
case'#':j = 6;
break;
}
return a[i][j];
}
int Sfshu(char c) //判断c是否为操作数
{
if (c >= '0' && c <= '9')
{
return 1;
}
else return 0;
}
float Js(char a, char y , char b ) //计算Z=xAy
{
char n='0';
char i, j;
i = a - '0';
j = b - '0';
switch (y)
{
case'+':n = (i + j) + '0'; break;
case'-':n = (i - j) + '0'; break;
case'*':n = (i * j) + '0'; break;
case'/':n = (i / j) + '0'; break;
}
return n;
}
void Sc()
{
char a, b, c, x, y;
Zhan1 z1; //符号栈
Zhan2 z2; //数字栈
cin >> c;
while (c!='#'||z1.top != '#')
{
if (Sfshu(c)==1)
{
z2.Push(c);
}
else
{
switch (Ysj(z1.Gettop(), c))
{
case'<':
z1.Push(c);
break;
case'=':
z1.Pop(x = c);
break;
case'>':
z2.Pop(a = c);
z1.Pop(y = c);
z2.Pop(b = c);
z2.Push(Js(a, y, b));
break;
}
}
}
cout << z2.Gettop() - '0' << endl;
}
int main()
{
Sc();
return 0;
}
