Pagini recente » Cod sursa (job #58766) | Cod sursa (job #2469866) | Cod sursa (job #777747) | Cod sursa (job #1539364) | Cod sursa (job #402448)
Cod sursa(job #402448)
// Simionescu Andrei, 2/21/2010
// http://infoarena.ro/problema/evaluare
// Dificultate: EASY->MEDIUM
// Categorii: Interpretare
#include <cstdio>
using namespace std;
#define NMAX 100009
char input[NMAX], * p = input;
int eval( int grade )
{
if ( grade == 0 )
{
int r = eval(1);
while( *p == '+' || *p == '-' )
{
if ( *p == '+' )
++p,
r += eval(1);
else
++p,
r -= eval(1);
}
return r;
}
if ( grade == 1 )
{
int r = eval(2);
while( *p == '*' || *p == '/' )
{
if ( *p == '*' )
++p,
r *= eval(2);
else
++p,
r /= eval(2);
}
return r;
}
if (grade == 2)
{
int r = 0;
if( *p == '(')
{
++p;
r = eval(0);
++p;
}
else
{
while( *p >= '0' && *p <= '9' )
{
r = r * 10 + *p - '0';
++p;
}
}
return r;
}
}
int main(){
freopen( "evaluare.in", "r", stdin );
freopen( "evaluare.out", "w", stdout );
gets( input );
printf( "%d\n", eval(0) );
return 0;
}