Pagini recente » Cod sursa (job #1354985) | Cod sursa (job #2775879) | Cod sursa (job #1321550) | Cod sursa (job #643543) | Cod sursa (job #392720)
Cod sursa(job #392720)
#include<cstring>
#include<cstdio>
#define LM 2
#define NX 100000
typedef struct nod * pnod;
struct nod {int val;char op;pnod st;pnod dr;
nod(int a=0,char b=' ',pnod l=NULL,pnod r=NULL ){val=a,op=b,st=l,dr=r;}
};
pnod A=NULL;
char S[NX],*p;
char ad[4][4]={"+-","*/","^",""};
pnod expr(int t)
{pnod x,y;
if(t==LM)
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(t+1);strchr(ad[t],*p);x=y)
y=new nod(0,*p++,x,expr(t+1));
return x;
}
int eval(pnod p)
{switch(p->op)
{ case '+' : return eval(p->st)+eval(p->dr);
case '-' : return eval(p->st)-eval(p->dr);
case '*' : return eval(p->st)*eval(p->dr);
case '/' : return eval(p->st)/eval(p->dr);
default : return p->val;
}
}
void afisare(pnod x)
{
if(x->val)
{printf("%d ",x->val);return;}
else printf("%c ",x->val);
afisare(x->st);
afisare(x->dr);
}
int main()
{freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
//scanf("%s",S);
fgets(S,NX,stdin);
p=S;
A=expr(0);
//afisare(A);
//printf("%c ",A->dr->op);
printf("%d\n",eval(A));
fclose(stdin);
fclose(stdout);
return 0;
}