#include <iostream>
#include <cstdio>
#include <string>
#include <stack>
#include <map>
using namespace std;
void Calculate(stack<double>& num, char oper) {//根据传入数据计算结果
double right = num.top();
num.pop();
double left = num.top();
num.pop();
double ret = 0;
switch (oper) {
case '+':
ret = left + right;
break;
case '-':
ret = left - right;
break;
case '*':
ret = left * right;
break;
case '/':
ret = left / right;
break;
}
num.push(ret);
}
double isNumber(char count) { //转换传入字符,不是数字输出-1
if ('0' <= count && count <= '9') {
return count - '0';
} else {
return -1;
}
}
double assembleNumber(string exp, int& i) {
double data = 0;
while (isNumber(exp[i]) != -1) {
data = data * 10 + exp[i++] - '0';
}
return data;
}
int main() {
char str[101];
map<char, int> prior = { //记录各符号优先级
{'$', 0},
{'+', 1}, {'-', 1},
{'*', 2}, {'/', 2},
};
while (scanf("%s", str) != EOF) {
string exp = str;
stack<double> num;
stack<char> oper;
exp.push_back('$');//终止标志
for (int i = 0; i < exp.size();) { //遍历表达式
if (isNumber(exp[i]) != -1) {
num.push(assembleNumber(exp, i));
} else {
while (!oper.empty() && prior[oper.top()] >= prior[exp[i]]) {
Calculate(num, oper.top());
oper.pop();//使用过该符号后弹出栈
}
oper.push(exp[i++]);//此时的符号入栈
}
}
printf("%.0f\n", num.top());
}
}
// 64 位输出请用 printf("%lld")