#include<iostream> #include<stack> #include<string> using namespace std; char compare(char tp, char op) { if (((tp == '+' || tp == '-') && (op == '*' || op == '/')) || (tp == '#')) return '<'; else if (tp == '('&&op != ')') return '<'; else if ((tp == '*' || tp == '/'||tp=='+'||tp=='-') && (op == '(')) return '<'; return '>'; } int compute(int n1, int n2, char op) { if (op == '+') return n1 + n2; else if (op == '-') return n1 - n2; else if (op == '*') return n1*n2; else if (op == '/') return n2 / n1; } int main() { stack<char>num; stack<char>oper; oper.push('#'); string s; cin >> s; for (int i = 0; i<s.length(); i++) { if (s[i] == '0' || s[i] == '1' || s[i] == '2' || s[i] == '3' || s[i] == '4' || s[i] == '5' || s[i] == '6' || s[i] == '7' || s[i] == '8' || s[i] == '9') num.push(s[i]); else { char comp = compare(oper.top(), s[i]); if (comp == '<') oper.push(s[i]); else if (comp == '>') { if (s[i] == ')') { if (num.size() != 1) { while (oper.top() != '(') { int num1 = num.top() - '0'; num.pop(); int num2 = num.top() - '0'; num.pop(); int result = compute(num1, num2, oper.top()); num.push(result + '0'); oper.pop(); } } oper.pop(); } else { int num1 = num.top(); num.pop(); int num2 = num.top(); num.pop(); char result = compute(num1, num2, oper.top()); num.push(result); oper.pop(); oper.push(s[i]); } } } } if (num.size() != 1) { while (oper.top() != '#') { int num1 = num.top()-'0'; num.pop(); int num2 = num.top()-'0'; num.pop(); int result = compute(num1, num2, oper.top()); num.push(result+'0'); oper.pop(); } } cout << num.top() << endl; return 0; }