Cod sursa(job #859056)

Utilizator AlexandruValeanuAlexandru Valeanu AlexandruValeanu Data 19 ianuarie 2013 17:31:22
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <cstdio>
#include <cstring>

#define Nmax 100002

char e[Nmax], *p;

void citire();
inline int Expresie();
inline int Factor();
inline int Termen();
void afis();

int main(){

    citire();
    afis();

    return 0;
}

void citire(){

    freopen("evaluare.in", "r", stdin);

    scanf("%s", e);

    p = e;
}

void afis(){

    freopen("evaluare.out", "w", stdout);

    printf("%d\n", Expresie());
}

inline int Factor(){

    int t = 0;

    if(*p == '(')
        p++,
        t = Expresie(),
        p++;
    else
        for(; *p >= 48 && *p <= 58; ++p)
            t = t * 10 + *p - 48;

    return t;
}

inline int Termen(){

    int t = Factor();

    while(1)
        if(*p == '*')
            p++,
            t *= Factor();
        else
            if(*p == '/')
                p++,
                t /= Factor();
            else
                break;

    return t;
}

inline int Expresie(){

    int t = Termen();

    while(1)
        if(*p == '+')
            p++,
            t += Termen();
        else
            if(*p == '-')
                p++,
                t -= Termen();
            else
                break;

    return t;
}