Cod sursa(job #956313)

Utilizator cousin.batmanVaru Batman cousin.batman Data 2 iunie 2013 20:24:54
Problema Evaluarea unei expresii Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.91 kb
#include<string.h>
#include<stdio.h>
#define MAXLen 100001

char a[MAXLen];
char op[][3] = {"+-", "*/"};
char *p = a;

int apply(int x, int y, char op){
    switch(op){
        case '+': return x+y;
        case '-': return x-y;
        case '/': return x/y;
        case '*': return x*y;
    }
    return 0;
}

int eval(int level){
    int x=0;
    if(level == 2){

        if(*p == '(')
            ++p, x = eval(0), ++p;
        else 
            while(*p>='0' && *p<='9')
                x = x*10+(*p++ - '0');
       
        return x; 
    }
    else {
        for(x = eval(level+1); strchr(op[level], *p);)
            x = apply(x, eval(level+1), *p++);
        return x;
    }

}
int main(){
    FILE *f = fopen("evaluare.in", "r");
    FILE *g = fopen("evaluare.out", "w");

    fgets(a, MAXLen*sizeof(int), f);
    
    int result = eval(0); 
    fprintf(g, "%d\n", result);

    fclose(f);
    fclose(g);
    return 0;
}