Pagini recente » Cod sursa (job #1131686) | Cod sursa (job #2845100) | Cod sursa (job #220657) | Cod sursa (job #3159474) | Cod sursa (job #613603)
Cod sursa(job #613603)
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#define LMAX 2
char op[4][4] = {"+-", "*/", "^", ""};
#define NMAX 100010
char infix[NMAX], *p = infix;
int eval(int a, int b, char c)
{
switch(c) {
case '+': return a+b;
case '-': return a-b;
case '/': return a/b;
case '*': return a*b;
}
}
int expr(int lev)
{
int x, y;
if (lev == 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(lev+1); strchr(op[lev], *p); x=y)
y = eval(x, expr(lev+1), *p++);
return x;
}
int main()
{
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
fgets(infix, NMAX, stdin);
printf("%d\n", expr(0));
return 0;
}