Cod sursa(job #1116415)

Utilizator PatrikStepan Patrik Patrik Data 22 februarie 2014 15:42:14
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
    #include<cstdio>
    using namespace std;
    #define MAX 100001
    char s[MAX];
    int i;

    int eval();
    int t();
    int f();

    int main()
    {
        freopen("evaluare.in" , "r" , stdin );
        freopen("evaluare.out" , "w" , stdout );
        scanf("%s" , s );
        printf("%d" , eval());
        return 0;
    }

    int eval()
    {
        int rez = t();
        while(s[i] == '+' || s[i] == '-'){
            if(s[i] == '+')
                i++,rez+=t();
            else
                i++,rez-=t();}
        return rez;
    }

    int t()
    {
        int rez = f();
        while(s[i] == '/' || s[i] =='*'){
            if(s[i] == '/')
                i++,rez/=f();
            if(s[i] == '*')
                i++,rez*=f();}
        return rez;
    }

    int f()
    {
        int x = 0;
        if(s[i] == '(')i++,x = eval(),i++;
        while(s[i] >='0' && s[i] <= '9')
            x = x*10+s[i++]-48;
        return x;
    }