Cod sursa(job #1412849)

Utilizator popescu.octavianPopescu Octavian popescu.octavian Data 1 aprilie 2015 16:42:11
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <cstdio>
#include <cstring>
#define LMax 100001

using namespace std;

char s[LMax+1];
int i, j, n;

int Eval();
int EvaluareFactor();
int EvaluareTermen();
int EvaluareExpresie();

int main()
{
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w",stdout);
    fgets(s,LMax,stdin);
    n=strlen(s);
    printf("%d\n",EvaluareExpresie());
    return 0;
}
int Eval()
{
    int f=0;
    j=i;
    while(s[j]>='0'&&s[j]<='9')
    {
        f=f*10+s[j]-'0';
        j++;
    }
    return f;
}
int EvaluareFactor()
{
    int f=0;
    if(s[i]=='(')
    {
        i++;
        f=EvaluareExpresie();
        i++;
    }
    else
    {
        f=Eval();
        i=j;
    }
    return f;
}
int EvaluareTermen()
{
    int f=EvaluareFactor();
    while(i<n&&(s[i]=='*'||s[i]=='/'))
    {
        if(s[i]=='*') {i++; f*=EvaluareFactor();}
            else {i++; f/=EvaluareFactor();}
    }
    return f;
}
int EvaluareExpresie()
{
    int t=EvaluareTermen();
    while(i<n&&(s[i]=='+'||s[i]=='-'))
    {
        if(s[i]=='+') {i++; t+=EvaluareTermen();}
            else {i++; t-=EvaluareTermen();}
    }
    return t;
}