Cod sursa(job #1730129)

Utilizator dorumusuroiFMI - Doru Musuroi dorumusuroi Data 16 iulie 2016 13:36:24
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <fstream>
#include <cassert>

#define cout g

using namespace std;

string opLevel[2] = {"+-", "*/"};

int eval(int a, char op, int b){
    switch(op){
        case '+': return a + b;
        case '-': return a - b;
        case '*': return a * b;
        case '/': return a / b;
        default: assert(false);
    }
}

int solve(string::iterator &it, int lev){
    int a,b;
    if(lev == 2){
        if(*it == '('){
            ++it;
            a = solve(it, 0);
            ++it;
        }
        else
            for(a = 0; *it >= '0' && *it <= '9'; ++it)
                a = a * 10 + *it - '0';
    }
    else{
        a = solve(it, lev+1);
        while(opLevel[lev].find(*it) != string::npos){
            char op = *it;
            b = eval(a, op, solve(++it, lev+1));
            a = b;
        }
    }
    return a;
}

int main()
{
    string s;
    ifstream f("evaluare.in");
    f >> s;
    f.close();
    string::iterator it = s.begin();
    ofstream g("evaluare.out");
    cout << solve(it, 0);
    g.close();
    return 0;
}