Cod sursa(job #1099792)

Utilizator cernat.catallinFMI Cernat Catalin Stefan cernat.catallin Data 6 februarie 2014 12:25:23
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <stdio.h>

#define Nmax 100005

int termen();
int factor();
char a[Nmax], *p;

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

int termen()
{
    int r = factor();
    while (*p == '*' || *p == '/'){
        if (*p == '*'){
            ++p;
            r *= factor();
        } else{
            ++p;
            r /= factor();
        }
    }
    return r;
}

int factor()
{
    int r = 0;
    if (*p == '('){
        ++p;
        r = eval();
        ++p;
    } else{
        while ('0' <= *p && *p <= '9'){
            r = r * 10 + *p - '0';
            ++p;
        }
    }
    return r;
}

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

    scanf("%s\n", a);
    p = a;
    printf("%d\n", eval());

    fclose(stdin);
    fclose(stdout);
    return 0;
}