Cod sursa(job #783952)

Utilizator my666013Test Here my666013 Data 4 septembrie 2012 16:26:56
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <cstdio>
#include <cctype>
#define Max 100001

char a[Max],*b;

int eval();
int termen();
int factor();

int factor(){
    int r = 0;
    if( *b == '(')
    {
        b++;
        r = eval();
        b++;
    } else
    {
        while( isdigit(*b) )
        {
            r = r* 10 + *b- '0';
            b++;
        }
    }
    return r;
}

int termen(){
    int r = factor();
    while( *b == '*'  || *b == '/' )
    {
        if(*b == '*' )
        {
            b++;
            r *= factor();

        }
        if(*b == '/' )
        {
            b++;
            r /= factor();
        }
    }
    return r;
}

int eval(){
    int r = termen();
    while( *b == '+' || *b == '-' )
    {
        if( *b == '+' )
        {
            b++;
            r += termen();
        }
        if( *b == '-' )
        {
            b++;
            r -= termen();
        }
    }
    return r;
}

int main(){
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w",stdout);

    scanf("%s ",a);

    b = a;

    printf("%d\n",eval());

    return 0;
}