Cod sursa(job #1673545)

Utilizator PaulStighiStiegelbauer Paul-Alexandru PaulStighi Data 3 aprilie 2016 22:11:27
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<fstream>
#include<cstring>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");

char S[100010];
char *p=S;
char operand[4][4] = {"+-", "*/", "^", ""};
const long hmax = 2;

void Read()
{
    fin.getline(S,100010);
}

int operatie(int x,int y,char c)
{
    switch ( c )
    {
        case '+': return x+y;
        case '-': return x-y;
        case '*': return x*y;
        case '/': return x/y;
    }
    return 0;
}

int eval(int);

int element()
{
    int r=0;

    if ( *p == '(' )
    {   ++p; r = eval(0); ++p;  }
    else
    {
        while ( strchr("0123456789", *p) )
            r = r*10 + *(++p-1) - '0';
    }

    return r;
}

int eval(int h)
{
    int r = (h==hmax)?element():eval(h+1);

    while ( strchr(operand[h], *p) )
        r = operatie(r, eval(h+1), *(++p-1));

    return r;
}

void Print()
{
    fout<<eval(0)<<"\n";
}

int main()
{
    Read();
    Print();

    fin.close();
    fout.close();
    return 0;
}