Cod sursa(job #613630)

Utilizator paullikPaul Barbu -Gh paullik Data 1 octombrie 2011 22:17:59
Problema Evaluarea unei expresii Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.12 kb
#include <stdio.h>

#define M 100010

char s[M], *p=s;

long termen();
long factor();

long eval(){
    long r = termen();

    while(*p == '+' || *p == '-'){
        switch(*p){
            case '+':
                ++p;
                r += termen();
                break;
            case '-':
                r -= termen();
                break;
        }
    }

    return r;
}

long termen(){
    long r = factor();

    while(*p == '*' || *p == '/'){
        switch(*p){
            case '*':
                ++p;
                r *= factor();
                break;
            case '/':
                ++p;
                r /= factor();
                break;
        }
    }

    return r;
}

long factor(){
    long r = 0;

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

    return r;
}

int main(){
    FILE *f, *g;

    f = fopen("evaluare.in", "r");
    g = fopen("evaluare.out", "w");


    fgets(s, M, f);

    fprintf(g, "%ld", eval());

    fclose(f);
    fclose(g);

    return 0;
}