#include<stdio.h> #include<stack> #include<string.h> #include<iostream> int flag=0; using namespace std; #define N 10010 int pri(char c) { if(c=='('){ return 3; } else if(c=='+'||c=='-') return 1; else return 2; } stack<int> data; stack<char> fu; void compu() { char cc=fu.top(); fu.pop(); int num,a,b; b=data.top(); data.pop(); a=data.top(); data.pop(); if(cc=='+') num=a+b; else if(cc=='-') num=a-b; else if(cc=='*') num=a*b; else num=a/b; data.push(num); } int jisuan(char a[]) { int len=strlen(a); for(int i=0;i<len;i++){
if(a[i]>='0'&&a[i]<='9'){ int num=a[i]-'0',j; for(j=i+1;a[j]>='0'&&a[j]<='9'&&j<len;j++){ num=num*10+a[j]-'0'; } if(flag==1){ num=-num; flag=0; } data.push(num); i=j-1; } else { if(a[i]=='-'&&(a[i+1]>='0'&&a[i+1]<='9')&&(!(a[i-1]>='0'&&a[i-1]<='9')||a[i-1]=='0')) {flag=1; continue; } if(fu.size()==0){ fu.push(a[i]); } else{ char f1=fu.top(); if(a[i]==')'){ while(fu.top()!='('){ compu(); } fu.pop(); } else if(pri(a[i])<=pri(f1)&&f1!='('){ compu(); fu.push(a[i]); } else fu.push(a[i]); } } } while(fu.size()){ compu(); } int res=data.top(); data.pop(); return res; } int main() { char a[N]; while(scanf("%s",a)!=EOF){ cout<<jisuan(a)<<endl; } }