#include <iostream> #include <cstdio> #include <stack> #include <cstring> using namespace std; int r(char c) { switch(c) { case '#': return 0; case '(': return 0; case '+': return 1; case '-': return 1; case '*': return 2; case '/': return 2; case ')': return 3; default: return -1; } } int cal(int a, int b, char c) //运算 { switch(c) { case '+': return a+b; case '-': return a-b; case '*': return a*b; case '/': return a/b; default: return -1; } } int main() { char s[210]; int i; while(cin.getline(s, sizeof(s))) { if(strcmp(s, "0") == 0) return 0; int len = strlen(s); s[len++] = ' '; s[len++] = '#'; s[len] = '/0'; stack<char> f; stack<int> dit; f.push('#'); for(i = 0; i < len; i++) { if(s[i] == ' ') continue; if(isdigit(s[i])) { int temp; sscanf(s+i, "%d", &temp); dit.push(temp); while(isdigit(s[i+1])) i++; } else { bool ok = 1; while(ok) { if(r(s[i]) > r(f.top()) && s[i] != ')' || s[i] == '(') { f.push(s[i]); ok = 0; } else { if(s[i] == '#' && f.top() == '#') break; if(s[i] == ')'){ while(f.top() != '('){ int b = dit.top(); dit.pop(); int a = dit.top(); dit.pop(); char c = f.top(); f.pop(); int d = cal(a, b, c); dit.push(d); } f.pop(); ok = 0; } else{ if(f.top() == '(') { ok = 0; } int b = dit.top(); dit.pop(); int a = dit.top(); dit.pop(); char c = f.top(); f.pop(); int d = cal(a, b, c); dit.push(d); } if(s[i] == '#' && f.top() == '#') break; } } } } int ret = dit.top(); printf("%d ", ret); while(!f.empty()) f.pop(); while(!dit.empty()) dit.pop(); } return 0; }