Cod sursa(job #289183)

Utilizator AnDrEwBoYA Andrei AnDrEwBoY Data 26 martie 2009 15:23:34
Problema Evaluarea unei expresii Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <cstdio>  
#include <cstring>  
   
#define LMAX 2  
char op[4][4] = { "+-", "*/", "^", "" };  
   
#define NX 100010  
char S[NX], *p = S;  
  
long eval( long a, long b, char op ) 
{  
     switch( op ) 
     {  
         case '+': return a + b;  
         case '-': return a - b;  
         case '*': return a * b;  
         case '/': return a / b;
         default : return 0;  
     }  
}  

long expr( int lev ) 
{  
     long x, y;  
       
     if( lev == LMAX )  
         if( *p == '(' )  
              ++p, x = expr(0), ++p;  
         else  
            for( x = 0; '0' <= *p && *p <= '9'; ++p )  
                 x = x * 10 + *p - '0';  
    else  
         for( x = expr(lev+1); strchr(op[lev], *p); x = y )  
             y = eval( x, expr(lev+1), *p++ );  
     return x;  
}  
 
int main() 
{  
     freopen("evaluare.in","r",stdin);
     scanf("%s",S);
     fprintf( fopen( "evaluare.out", "w" ), "%ld\n", expr(0) );  
     fclose(stdin); fclose(stdout);
     return 0;  
}