Cod sursa(job #1675542)

Utilizator superstar1998Moldoveanu Vlad superstar1998 Data 5 aprilie 2016 13:13:34
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdio>
#define MAXN (1<<17)
#define LMAX 2
using namespace std;
char s[MAXN+1],*p;
char op[4][4] = { "+-", "*/", "^", "" };
struct nod
{
    int val;
    char op;
    nod*l,*r;
    nod(int a=0,char b=0,nod* c=0,nod* d=0)
        :val(a),op(b),l(c),r(d){}
}*A;
nod* expr(int lv)
{
    nod*x,*y;
    if(lv==LMAX)
        if(*p=='(')
            ++p,x=expr(0),++p;
        else for(x=new nod();*p>='0'&&*p<='9';++p)
                    x->val=x->val*10+*p-'0';
    else for(x=expr(lv+1);strchr(op[lv],*p);x=y)
                    y=new nod(0,*p++,x,expr(lv+1));
    return x;
}
int eval(nod* 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() {
    freopen( "evaluare.in", "r", stdin );
    freopen( "evaluare.out", "w", stdout );
    fgets(s,MAXN,stdin),p=s;
    A=expr(0);
    printf("%d\n",eval(A));
    return 0;
}