Cod sursa(job #735491)

Utilizator mirceadinoMircea Popoveniuc mirceadino Data 16 aprilie 2012 16:13:01
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include<cstdio>
char expresie[100010],*p;
long long int eval(),termen(),factor(),numar();
long long int eval()
{
    long long int r=termen();
    while(*p=='+'||*p=='-')
    {
        switch(*p)
        {
            case '+': {p++; r+=termen(); break;}
            case '-': {p++; r-=termen(); break;}
        }
    }
    return r;
}
long long int termen()
{
    long long int r=factor();
    while(*p=='*'||*p=='/')
    {
        switch(*p)
        {
            case '*': {p++; r*=factor(); break;}
            case '/': {p++; r/=factor(); break;}
        }
    }
    return r;
}
long long int factor()
{
    long long int r=0;
    if(*p=='(')
    {
        p++;
        r=eval();
        p++;
    }
    else r=numar();
    return r;
}
long long int numar()
{
    long long int r=0;
    while(*p>='0'&&*p<='9')
    {
        r=r*10+*p-'0';
        p++;
    }
    return r;
}
int main()
{
    long long int rez;
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w",stdout);
    gets(expresie);
    p=expresie;
    rez=eval();
    printf("%lld",rez);
    return 0;
}