Cod sursa(job #1208799)

Utilizator catalinrebegeaUNIBUC-Claudia Catarig catalinrebegea Data 16 iulie 2014 16:25:26
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <cstdio>
#include <cstring>
#define Nmax 100005

using namespace std;

int p=1,N;
char a[Nmax];

int expr();

inline int nr()
{
    int sol=0;
    if(p>N) return 0;
    for(;a[p]>='0' && a[p]<='9' && p<=N;sol=sol*10+a[p]-'0',++p);
    return sol;
}

inline int fact()
{
    if(p>N) return 0;
    if(a[p]>='0' && a[p]<='9')
        return nr();
    else
    {
        ++p;
        int aux=expr();
        ++p;
        return aux;
    }
}

inline int term()
{
    if(p>N) return 0;
    int sol=fact();
    while(p<N && (a[p]=='*' || a[p]=='/'))
    {
        ++p;
        if(a[p-1]=='*')
            sol*=fact();
        else
            sol/=fact();
    }
    return sol;
}

inline int expr()
{
    if(p>N) return 0;
    int sol=term();
    while(p<N && (a[p]=='+' || a[p]=='-'))
    {
        ++p;
        if(a[p-1]=='+')
            sol+=term();
        else
            sol-=term();
    }
    return sol;
}

int main()
{
    freopen ("evaluare.in","r",stdin);
    freopen ("evaluare.out","w",stdout);
    scanf("%s", (a+1));
    N=strlen(a+1);
    printf("%d\n", expr());
    return 0;
}