#include <iostream> #include <stack> #include <unordered_map> using namespace std; stack<char> op; stack<double> num; void eval() { auto b = num.top(); num.pop(); auto a = num.top(); num.pop(); auto c = op.top(); op.pop(); double x; if(c == '+') x = a + b; else if(c == '-') x = a - b; else if(c == '*') x = a * b; else x = a / b; num.push(x); } int main() { string s; cin >> s; unordered_map<char, int> pr{{'+', 1}, {'-', 1}, {'*', 2}, {'/', 2}}; for(int i = 0; i < s.size(); i ++ ) { if(isdigit(s[i])) { int j = i; double x = 0; while(j < s.size() && isdigit(s[j])) x = x * 10 + s[j ++ ] - '0'; num.push(x); i = j - 1; } else if(s[i] == '(') op.push(s[i]); else if(s[i] == ')') { while(op.top() != '(') eval(); op.pop(); } else { while(op.size() && op.top() != '(' && pr[op.top()] >= pr[s[i]]) eval(); op.push(s[i]); } } while(op.size()) eval(); cout << num.top() << endl; return 0; }