Cod sursa(job #516635)

Utilizator AndrewTheGreatAndrei Alexandrescu AndrewTheGreat Data 25 decembrie 2010 11:19:17
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <stdio.h>
#include <string.h>

const int nmax = 100010;
const int LMAX = 2;

char op[4][4] = {"+-","*/","",""};
char S[nmax];
char *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;
    }
    return 0;
}

int expr(int lev)
{
    int x, y;
    if(lev == LMAX)
        if(*p == '(')
        {
            p++;
            x = expr(0);
            p++;
        }
        else
            for(x = 0; *p <= '9' && *p >= '0'; 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);
    fgets(S, nmax, stdin);
    printf("%d\n",expr(0));
}