Cod sursa(job #1768937)

Utilizator aaron72Armand Ioan Anusca Popa aaron72 Data 1 octombrie 2016 18:41:10
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <iostream>
#include <string>
#include <fstream>

#define LMAX 2
char op[4][4] = { "+-", "*/", "^", "" };

#define NX (1<<17)
char S[ NX ], *p;

struct node {
    int val;
    char op;
    node *l, *r;
    
    node( int a = 0, char b = 0, node *c = 0, node *d = 0 ) :
    val(a), op(b), l(c), r(d) {}
} *A;

node *expr( int lev ) {
    node *x, *y;
    
    if( lev == LMAX )
        if( *p == '(' )
            ++p, x = expr(0), ++p;
        else
            for( x = new node(); *p >= '0' && *p <= '9'; ++p )
                x->val = x->val * 10 + *p - '0';
        else
            for( x = expr( lev+1 ); strchr( op[lev], *p ); x = y )
                y = new node( 0, *p++, x, expr( lev+1 ) );
    return x;
}


int eval( node *n ) {
    switch( n->op ) {
        case '+': return eval( n->l ) + eval( n->r );
        case '-': return eval( n->l ) - eval( n->r );
        case '*': return eval( n->l ) * eval( n->r );
        case '/': return eval( n->l ) / eval( n->r );
        default: return n->val;
    }
}

int main() {
    freopen( "evaluare.in", "r", stdin );
    freopen( "evaluare.out", "w", stdout );
    
    fgets( S, NX, stdin ), p = S;
    A = expr( 0 );
    printf( "%d\n", eval( A ) );
    
    return 0;
}