Pagini recente » Cod sursa (job #2085112) | Cod sursa (job #2892726) | Cod sursa (job #1090758) | Cod sursa (job #19676) | Cod sursa (job #1758512)
#include <cstdio>
#include <cstring>
using namespace std;
char s[200000];
int poz, n;
int numar();
int parant();
int numar() {
if ( s[poz]=='(' ) {
++poz;
return parant();
}
int val=0;
while ( s[poz]>='0' && s[poz]<='9' && poz < n ) {
val = val * 10 + s[poz] - '0';
++poz;
}
return val;
}
inline int ec ( int a, int b, char s ) {
switch ( s ) {
case '+':return a+b;
case '-':return a-b;
case '*':return a*b;
case '/':return a/b;
}
}
int parant() {
int a, b, c;
char s1, s2;
a = numar();
if ( poz == n ||s[poz]==')' ) {
++poz;
return a;
}
s1 = s[poz];
++poz;
b = numar();
if ( poz == n || s[poz] == ')' ) {
++poz;
return ec ( a, b, s1 );
}
while( poz != n && s[poz] != ')' ) {
s2 = s[poz];
++poz;
c = numar();
if ( s1 == '*' || s1 == '/') {
a = ec ( a, b, s1 );
b = c;
s1 = s2;
}
else {
if ( s2 == '*' || s2 == '/' )
b = ec ( b, c, s2 );
else {
a= ec ( a, b, s1 );
b = c;
s1 = s2;
}
}
}
a = ec ( a, b, s1 );
++poz;
return a;
}
int main() {
freopen ( "evaluare.in", "r", stdin );
freopen ( "evaluare.out", "w", stdout );
gets ( s );
n = strlen ( s );
printf ( "%d", parant() );
return 0;
}