Cod sursa(job #402448)

Utilizator mordredSimionescu Andrei mordred Data 23 februarie 2010 21:13:34
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
// 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;
}