Cod sursa(job #985711)

Utilizator stefanfStefan Fulger stefanf Data 17 august 2013 13:21:04
Problema Evaluarea unei expresii Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.26 kb
#include<stdio.h>
#include<string.h>

char str[100000];
int n, i;

// E=T+E'|T-E'|T
// E'=E'+|T
int expression() {
    int e = term();
    
    while(i < n && (str[i] == '-' || str[i] == '+')) {
        switch(str[i]) {
            case '+': i++;
                      e += term();
                      break;
            case '-': i++; 
                      e -= term();
                      break;
        }
    }
    return e;
}

// T=F+T'|F-T'|F
// T'=T'+|F
int term() {
    int t = factor();
    while(i < n && (str[i] == '*' || str[i] == '/')) {
        switch(str[i]) {
            case '*': i++;
                      t *= factor();
                      break;
            case '/': i++;
                      t /= factor();
                      break;
        }
    }
    return t;
}

// F = (E) | nr
int factor() {
    if (str[i] == '(') {
        i++;
        int f = expression();
        i++;
        return f;
    }

    int nr = 0;
    while(i < n && (str[i] >= '0' && str[i] <= '9')) {
        nr *= 10;
        nr += str[i] - '0';
        i++;
    }

    return nr;
}

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

    scanf("%s", str);
    n = strlen(str);
    i = 0;
    printf("%d\n", expression());

    return 0;
}