Pagini recente » Statistici Ilie Alexandru (ihuiban) | Istoria paginii runda/boolanizarea/clasament | Cod sursa (job #2375577) | Cod sursa (job #1386417) | Cod sursa (job #1675542)
#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;
}