Cod sursa(job #651902)

Utilizator rootsroots1 roots Data 22 decembrie 2011 10:11:56
Problema Evaluarea unei expresii Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <cstdio>
#include <cstring>

#define expL 100005

int N,ind;
char exp[expL];

inline int crack1();
inline int crack2();
inline int crack3();

inline int crack1()
{
    int sol=crack2();

    for(;ind<=N&&(exp[ind]=='+'||exp[ind]=='-');)
        if(exp[ind++]=='+') sol+=crack2();
        else sol-=crack2();

    return sol;
}

inline int crack2()
{
    int sol=crack3();

    for(;ind<=N&&(exp[ind]=='*'||exp[ind]=='/');)
        if(exp[ind++]=='*') sol*=crack2();
        else sol/=crack2();

    return sol;
}

inline int crack3()
{
    int sol=0;

    if(exp[ind]=='(')
    {
        ++ind;
        sol=crack1();
        ++ind;
    }
    else
    for(;ind<=N&&'0'<=exp[ind]&&exp[ind]<='9';++ind)
    {
        sol*=10;
        sol+=exp[ind]-'0';
    }

    return sol;
}

int main()
{
    freopen("evaluare.in","r",stdin);

    fgets(exp,expL,stdin);
    N=strlen(exp)-1;

    ind=0;
    int sol=0;
    sol=crack1();

    freopen("evaluare.out","w",stdout);

    printf("%d\n",sol);

    return 0;
}