Cod sursa(job #1076764)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 10 ianuarie 2014 15:54:11
Problema Evaluarea unei expresii Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.15 kb
#include <stdio.h>
int n;
char s[100001];
int expresie();
int termen();
int factor();
int expresie(){
    int sum;
    sum=termen();
    while((s[n]=='+')||(s[n]=='-')){
        if(s[n]=='+'){
            n++;
            sum+=termen();
        }else{
            n++;
            sum-=termen();
        }
    }
    return sum;
}
int termen(){
    int sum;
    sum=factor();
    while((s[n]=='*')||(s[n]=='/')){
        if(s[n]=='*'){
            n++;
            sum*=factor();
        }else{
            n++;
            sum/=factor();
        }
    }
    return sum;
}
int factor(){
    int semn,val;
    val=0;
    semn=1;
    while(s[n]=='-'){
        semn=0-semn;
        n++;
    }
    if(s[n]=='('){
        n++;
        val=expresie();
        n++;
        return val*semn;
    }
    while((s[n]>='0')&&(s[n]<='9')){
        val=(val*10)+(s[n]-'0');
        n++;
    }
    return val*semn;
}
int main(){
    FILE *fin,*fout;
    fin=fopen("evaluare.in","r");
    fout=fopen("evaluare.out","w");
    fgets(s,100001,fin);
    fprintf(fout,"%d\n",expresie());
    fclose(fin);
    fclose(fout);
    return 0;
}