Cod sursa(job #2136846)

Utilizator EmplopiStefan Nitu Emplopi Data 20 februarie 2018 12:02:46
Problema Evaluarea unei expresii Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.09 kb
#include <stdio.h>
#include <stdlib.h>

char s[100001];
int p;
int expresie();
int factor();
int termen();

int expresie(){
    int sum=termen();
    while(s[p]=='+' || s[p]=='-'){
        p++;
        if(s[p-1]=='+')
            sum+=termen();
        else
            sum-=termen();
    }

    return sum;
}

int termen(){
    int prd=factor();
    while(s[p]=='*' || s[p]=='/'){
        p++;
        if(s[p-1]=='*')
            prd*=factor();
        else
            prd/=factor();
    }

    return prd;
}

int factor(){
    int val=0, semn=1;
    while(s[p]=='-'){
        p++;
        semn*=-1;
    }
    if(s[p]=='('){
        p++;
        val=expresie();
        p++;
        return semn*val;
    }
    while(s[p]>='0' && s[p]<='9'){
        val=val*10+(s[p]-'0');
        p++;
    }

    return semn*val;
}

int main(){
    FILE *fin, *fout;
    int i;
    fin=fopen("evaluare.in", "r");
    fout=fopen("evaluare.out", "w");
    s[0]=fgetc(fin);
    i=0;
    while(s[i]!='\n'){
        i++;
        s[i]=fgetc(fin);
    }
    fprintf(fout, "%d", expresie());
    fclose(fin);
    fclose(fout);

    return 0;
}