Cod sursa(job #1827166)

Utilizator VladTiberiuMihailescu Vlad Tiberiu VladTiberiu Data 11 decembrie 2016 15:30:58
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <bits/stdc++.h>

#define NMax 100002
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");

char op[4][4] = {"+-","*/",""};

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

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

char x[NMax];
char *p;

node *build(int lev){
    node *x , *y;

    if(lev == 2){
        if(*p == '('){
            p++;
            x = build(0);
            p++;
        }else{
            for(x = new node(0,0,0,0); *p >= '0' && *p <= '9'; ++p){
                x->val = x->val * 10 + *p - '0';
            }
        }
    }else{
        x = build(lev + 1);
        for(;strchr(op[lev],*p);x = y){
            y = new node(0,*p++,x,build(lev + 1));
        }
    }
    return x;
}
int eval(node *x){
    if(x->op == '+')return eval(x->l) + eval(x->r);
    if(x->op == '-')return eval(x->l) - eval(x->r);
    if(x->op == '*')return eval(x->l) * eval(x->r);
    if(x->op == '/')return eval(x->l) / eval(x->r);
    return x->val;
}
int main()
{
    f.getline(x,NMax);
    x[strlen(x)] = '\n';
    p = x;
    ET = build(0);
    g << eval(ET) << '\n';
    return 0;
}