Cod sursa(job #1245998)

Utilizator Master011Dragos Martac Master011 Data 20 octombrie 2014 12:43:59
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include<cstdio>
using namespace std;

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

const int Nmax = 100000;
char S[Nmax + 5];
int p;

int expresie();
int termen();
int factor();

int main (){
    fgets(S,Nmax,in);
    fprintf(out,"%d\n",expresie());
    return 0;
}

int expresie(){
    int sum = termen();

    while (S[p]=='-' || S[p]=='+'){
        if(S[p]=='-'){
            p++;
            sum-=termen();
        }else{
            p++;
            sum+=termen();
        }
    }
    return sum;
}

int termen(){
    int prod = factor();

    while (S[p]=='*' || S[p]=='/'){
        if(S[p]=='*'){
            p++;
            prod*=factor();
        }else{
            p++;
            prod/=factor();
        }
    }
    return prod;
}

int factor(){
    int val = 0, semn = 1;

    while (S[p]=='-'){
        semn=-semn;
    }

    if(S[p]=='('){
        p++;
        val=expresie();
        p++;

    }

    while(S[p]>='0' && S[p]<='9'){
        val=val*10+S[p]-'0';
        ++p;
    }
    return semn*val;
}