Cod sursa(job #196435)
#include <cstdio>
#include <cstring>
#define IN "eva;uare.in"
#define OUT "evaluare.out"
char s[100010];
char *p=s;
char semn[4][4] = {"+-", "*/", "^", ""};
const long hmax = 2;
void scan()
{
freopen(IN,"r",stdin);
freopen(OUT, "w",stdout);
gets(s);
}
int op(int x, int y, char c)
{
switch ( c )
{
case '+': return x+y;
case '-': return x-y;
case '*': return x*y;
case '/': return x/y;
}
return 0;
}
int eval(int);
int element()
{
int r=0;
if ( *p == '(' )
{
++p; r = eval(0); ++p;
}
else
{
while ( strchr("0123456789", *p) )
r = r*10 + *(++p-1) - '0';
}
return r;
}
int eval(int h)
{
int r = (h==hmax)?element():eval(h+1);
while ( strchr(semn[h], *p) )
r = op(r, eval(h+1), *(++p-1));
return r;
}
int main()
{
scan();
printf("%d\n", eval(0));
return 0;
}