Cod sursa(job #1166212)

Utilizator poptibiPop Tiberiu poptibi Data 3 aprilie 2014 12:55:00
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
using namespace std;

const int NMAX = 100010;

int Pos = 1;
char S[NMAX];

int Term();
int Fact();

int Eval()
{
    int Ans = Term();
    while(S[Pos] == '+' || S[Pos] == '-')
        if(S[Pos] == '+')
            Pos ++, Ans += Term();
        else
            Pos ++, Ans -= Term();
    return Ans;
}

int Term()
{
    int Ans = Fact();
    while(S[Pos] == '*' || S[Pos] == '/')
        if(S[Pos] == '*')
            Pos ++, Ans *= Fact();
        else
            Pos ++, Ans /= Fact();
    return Ans;
}

int Fact()
{
    int Ans;
    if(S[Pos] == '(')
    {
        Pos ++;
        Ans = Eval();
        Pos ++;
    }else
    {
        Ans = 0;
        while(S[Pos] && isdigit(S[Pos]))
            Ans = Ans * 10 + S[Pos] - '0', Pos ++;
    }
    return Ans;
}

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

    gets(S + 1);
    printf("%i\n", Eval());
}