Cod sursa(job #947233)

Utilizator BitOneSAlexandru BitOne Data 6 mai 2013 22:44:07
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <string>
#include <cstdlib>
#include <fstream>

using namespace std;

string exp;
const string op[] = {"+-", "*/", "^"};

inline int eval(char op, int a, int b)
{
    switch(op)
    {
        case '+' : return a + b;
        case '-' : return a - b;
        case '*' : return a * b;
        case '/' : return a / b;
    }
    return - (1 << 30);
}

inline bool isNumeric(char x) {return x >= '0' && x <= '9';}
inline int eval(int level, string::iterator& it, const string::iterator& iend)
{
    int x;
    if(2 == level)
    {
        if('(' == *it)
        {
            ++it;
            x = eval(0, (it), (iend));
            ++it;
        }
        else for(x = 0; it != iend && isNumeric(*it); ++it)
                x = x * 10 + *it - '0';
    }
    else for(x = eval(level + 1, (it), (iend)); it != iend && string::npos != op[level].find(*it); )
         {
            char op = *(it++);
            x = eval(op, x, eval(level + 1, (it), (iend)));
         }
    return x;
}

int main()
{
    ifstream in("evaluare.in");
    ofstream out("evaluare.out");

    getline(in, exp);
    string::iterator it = exp.begin();
    out << eval(0, it, exp.end());

    return EXIT_SUCCESS;
}