Cod sursa(job #1020008)

Utilizator usermeBogdan Cretu userme Data 1 noiembrie 2013 15:14:49
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <cstdio>

FILE*f=fopen("evaluare.in","r");
FILE*h=fopen("evaluare.out","w");

int p;

char s[200001];

int expresie();

int factor(){
    int val=0,semn=1;
    while ( s[p]=='-' ){
        semn=-semn;
        ++p;
    }
    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 termen(){
    int prod=factor();
    while ( s[p]=='*'||s[p]=='/' ){
        if ( s[p]=='*' ){
            ++p;
            prod*=factor();
        }
        if ( s[p]=='/' ){
            ++p;
            prod/=factor();
        }
    }
    return prod;
}

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

int main()
{
    fscanf(f,"%s",&s);
    fprintf(h,"%d",expresie());
    return 0;
}