Cod sursa(job #1976942)

Utilizator taigi100Cazacu Robert taigi100 Data 4 mai 2017 16:53:44
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
/*
    Keep It Simple!
*/
#include <fstream>
#include <cstring>

using namespace std;

const int MAX_N = 100001;
const int LMAX = 2;
char op[4][4] = {"+-", "*/", "^", ""};

char expr[MAX_N], *p = expr;
int N;

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

int eval(int depth) {
    int r, y;
    if (depth == LMAX) {
        if (*p == '(') {
                ++p; r = eval(0); ++p;
        } else {
            for (r = 0; *p >= '0' && *p <= '9'; ++p)
                r = r * 10 + *p - '0';
        }
    } else {
        for (r = eval(depth + 1); strchr(op[depth], *p) && strlen(p); r = y)
            y = oper(r, eval(depth+1), *p++);
    }
    return r;
}

void Solve() {
    ifstream f("evaluare.in");
    f >> expr;
    N = strlen(expr);

    ofstream g("evaluare.out");
    g << eval(0);
}

int main()
{
    Solve();
    return 0;
}