Pagini recente » Cod sursa (job #2075384) | Cod sursa (job #2608605) | Cod sursa (job #539415) | Cod sursa (job #3245254) | Cod sursa (job #700139)
Cod sursa(job #700139)
#include <cstdio>
#include<cstring>
#define infile "evaluare.in"
#define outfile "evaluare.out"
#define n_max 100010
#define Lmax 2
using namespace std;
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) {}
} *Rad;
char op[4][4] = {"+-", "*/", "^", "" };
char S[n_max], *p;
nod *expr(int lev)
{
nod *x, *y;
if(lev == 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(lev+1); strchr(op[lev], *p); x = y)
y = new nod(0, *p++, x, expr(lev+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(infile, "r", stdin);
freopen(outfile, "w", stdout);
fgets( S, n_max, stdin );
p = S;
Rad = expr(0);
printf("%d\n", eval(Rad));
fclose(stdin);
fclose(stdout);
return 0;
}