Cod sursa(job #862984)

Utilizator RaduDoStochitoiu Radu RaduDo Data 23 ianuarie 2013 09:23:22
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <cstdio>
#include <cstring>
#define LMAX 2
#define NX 100010
using namespace std;
char S[NX], *p = S;
char op[4][4] = { "+-", "*/", "^", "" };

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() {
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w",stdout);
    gets(S);
    int l=strlen(S);
    S[l]='\n';
    S[l+1]='\0';
    printf("%d\n", expr(0) );
    return 0;
}