Cod sursa(job #3331958)

Utilizator bogdan1479Luca Bogdan Alexandru bogdan1479 Data 2 ianuarie 2026 01:04:11
Problema Evaluarea unei expresii Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <fstream>
#include <cstring>

using namespace std;

ifstream fin("evaluare.in");
ofstream fout("evaluare.out");

#define LMAX 2
char op[4][4] = { "+-", "*/", "^", "" };

#define NX (1<<17)
char S[ NX ], *p;

struct node
{
    int val;
    char op;
    node *l, *r;

    node(int a = 0, char b = 0, node *c = 0, node *d = 0) :
        val(a), op(b), l(c), r(d) {}
} *A;

node *expr(int lev)
{
    node *x, *y;
    if(lev == LMAX)
        if(*p == '(')
            ++p, x = expr(0), ++p;
        else
            for(x = new node(); *p >= '0' && *p <= '9'; ++p)
                x->val = x->val * 10 + *p - '0';
    else
        for(x = expr(lev + 1); strchr(op[lev], *p); x = y)
            y = new node(0, *p++, x, expr(lev + 1));
    return x;
}

int eval(node *n)
{
    switch(n->op)
    {
    case '+':
        return eval(n->l) + eval(n->r);
    case '-':
        return eval(n->l) - eval(n->r);
    case '*':
        return eval(n->l) * eval(n->r);
    case '/':
        return eval(n->l) / eval(n->r);
    default:
        return n->val;
    }
}

int main()
{
    fin >> S;
    p = S;
    A = expr(0);
    fout << eval(A);
    return 0;
}