Pagini recente » Cod sursa (job #3319424) | Cod sursa (job #840888) | Cod sursa (job #3326646) | Cod sursa (job #3319423) | Cod sursa (job #3358553)
#include <fstream>
#include <string>
#include <map>
#include <stack>
using namespace std;
const int PRNT = 1e9 + 1;
const int INM = 1e9 + 2;
const int MNS = 1e9 + 3;
const int DV = 1e9 + 4;
int st[100005];
int main(){
ifstream cin( "evaluare.in" );
ofstream cout("evaluare.out" );
int i, l, nr;
string s;
cin >> s;
i = 0;
l = 0;
while( i < s.size() ){
if( s[i] == '(' ){
st[++l] = PRNT;
}
else if( s[i] == '*' )
st[++l] = INM;
else if( s[i] == '-' )
st[++l] = MNS;
else if( s[i] == '/' ){
st[++l] = DV;
}
else if( isdigit(s[i]) ){
nr = 0;
while( i < s.size() && isdigit(s[i]) ){
nr = nr * 10 + s[i] - '0';
i++;
}
i--;
if( l == 0 ){
st[++l] = nr;
}
else if( st[l] <= 1e9 ){
st[++l] = nr;
}
else if( st[l] == PRNT ){
st[++l] = nr;
}
else if( st[l] == INM ){
l--;
st[l] *= nr;
}
else if( st[l] == DV ){
l--;
st[l] /= nr;
}
else if( st[l] == MNS ){
st[l] = -nr;
}
}
else if( s[i] == ')' ){
nr = 0;
while( l > 0 && st[l] != PRNT ){
nr = nr + st[l];
l--;
}
l--;
if( l == 0 ){
st[++l] = nr;
}
else if( st[l] <= 1e9 ){
st[++l] = nr;
}
else if( st[l] == PRNT ){
st[++l] = nr;
}
else if( st[l] == INM ){
l--;
st[l] *= nr;
}
else if( st[l] == DV ){
l--;
st[l] /= nr;
}
else if( st[l] == MNS ){
st[l] = -nr;
}
}
i++;
}
nr = 0;
for( i = 1; i <= l; i++ ){
nr += st[i];
}
cout << nr;
return 0;
}