Cod sursa(job #1339127)

Utilizator Edsger.DijkstraEdsger Wybe Dijkstra Edsger.Dijkstra Data 10 februarie 2015 18:10:56
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream in ("evaluare.in");
ofstream out ("evaluare.out");

const int MAXN = 100001;

char S[MAXN];
char *P;

inline int GetInt ()
{
    int ret = 0;

    while (*P >= '0' && *P <= '9'){
        ret = (ret * 10) + *P - '0';
        P ++;
    }

    return ret;
}

int termen ();
int factor ();

int eval ()
{
    int ret = termen ();

    while (*P == '+' || *P == '-'){
        if (*P == '+'){
            P ++;
            ret += termen ();
        }
        else{
            P ++;
            ret -= termen ();
        }
    }

    return ret;
}

int termen ()
{
    int ret = factor ();

    while (*P == '*' || *P == '/')
        if (*P == '*'){
            P ++;
            ret *= factor ();
        }
        else{
            P ++;
            ret /= factor ();
        }

    return ret;
}

int factor ()
{
    int ret = 0;

    if (*P == '('){
        P ++;
        ret = eval ();
        P ++;
    }
    else
        ret = GetInt ();

    return ret;
}

int main()
{
    in >> S;
    P = S;
    out << eval ();

    return 0;
}