Cod sursa(job #1932918)

Utilizator rangalIstrate Sebastian rangal Data 20 martie 2017 10:46:28
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.43 kb
#include <fstream>
#include <cctype>
#define in "evaluare.in"
#define out "evaluare.out"
#define lgmax 100003

using namespace std;

ifstream fin(in);
ofstream fout(out);

typedef long long ll;

inline ll eval();
inline ll term();
inline ll factor();

char c[lgmax],*p = c;

inline ll eval()
{
    ll rez = term();
    while(*p == '+' || *p == '-' || *p == ' ')
    {
        switch(*p)
        {
        case '+':
            ++p;
            rez += term();
            break;
        case '-':
            ++p;
            rez -= term();
            break;
        default : ++p; break;
        }
    }
    return rez;
}

inline ll term()
{
    ll rez = factor();
    while(*p == '*' || *p == '/' || *p == ' ')
    {
        switch(*p)
        {
        case '*':
            ++p;
            rez *= factor();
            break;
        case '/':
            ++p;
            rez /= factor();
            break;
        default : ++p; break;
        }
    }
    return rez;
}

inline ll factor()
{
    ll rez = 0;

    while(*p == ' ') ++p;

    if(*p == '(')
    {
        ++p;
        rez = eval();
        ++p;
    }
    else
    {
        while(isdigit(*p))
        {
            rez = rez*10 + *p - '0';
            ++p;
        }
    }
    return rez;
}


int main()
{
    fin.getline(c,lgmax);

    fout<<eval()<<"\n";
    fin.close(); fout.close();
    return 0;
}