Pagini recente » Istoria paginii runda/eusebiu_oji_2011_cls11-12 | Cod sursa (job #2438913) | Cod sursa (job #312355) | Cod sursa (job #2025606) | Cod sursa (job #2373385)
#include <cstdio>
#include <cstring>
#define LMAX 2
#define CMAX 100009
using namespace std;
char op[4][4] = {"+-", "*/", "^", ""};
char c[CMAX], *p = c;
int eval(int a, int b, char x)
{
switch(x)
{
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
return a / b;
}
}
int expr(int lvl)
{
int x, y;
if(lvl == LMAX)
if(*p == '(')
++p, x = expr(0), ++p;
else
for(x = 0; *p >= '0' && *p <= '9'; ++p)
x = x * 10 + *p - '0';
else
for(x = expr(lvl + 1); strchr(op[lvl], *p); x = y)
y = eval(x, expr(lvl + 1), *p++);
return x;
}
int main()
{
fgets( c, CMAX, fopen( "evaluare.in", "r" ) );
fprintf( fopen( "evaluare.out", "w" ), "%d\n", expr(0) );
return 0;
}