Cod sursa(job #315849)

Utilizator Magnuscont cu nume gresit sau fals Magnus Data 17 mai 2009 15:39:07
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <cstdio>   
#include <cstring>   
  
#define LMAX 2 // nivelul maxim de prioritate   
char op[4][4] = { "+-", "*/", "^", "" }; // operatorii pe niveluri de prioritate   
  
#define NX 100010   
char S[NX], *p = S;   
  
int eval( int a, int b, char o ) {   
    switch( o ) {   
        case '+': return a + b;   
        case '-': return a - b;   
        case '*': return a * b;   
        case '/': return a / b;   
    }   
}   
     
int expr( int lev ) {   
    int x, y;   
       
    if( lev == LMAX )   
        if( *p == '(' )   
            ++p, x = expr(0), ++p;   
        else   
            for( x = 0; *p >= '0' && *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() {   
    fgets( S, NX, fopen( "evaluare.in", "r" ) );   
    fprintf( fopen( "evaluare.out", "w" ), "%d\n", expr(0) );   
    return 0;   
}