Pagini recente » Cod sursa (job #132307) | Cod sursa (job #616482) | Cod sursa (job #1844395) | Cod sursa (job #105499) | Cod sursa (job #1379881)
#include <bits/stdc++.h>
using namespace std;
const int Lmax = 100000 + 1;
char str[Lmax];
char *p;
const int H_MAX = 2;
const char op[H_MAX][4] = { "+-", "*/" };
int solve(int);
int eval(int a, int b, char ch)
{
switch(ch)
{
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return a / b;
default: return 0;
}
assert(1 == 0);
}
int termen()
{
int t = 0;
if (*p == '(')
{
p++;
t = solve(0);
p++;
}
else
{
while ( isdigit(*p) )
{
t = (t << 3) + (t << 1) + *p - '0';
p++;
}
}
return t;
}
int solve(int H)
{
int t = 0;
if (H == H_MAX)
t = termen();
else
t = solve(H + 1);
while ( strchr(op[H], *p) )
t = eval(t, solve(H + 1), *p++);
return t;
}
int main()
{
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
fgets(str, Lmax, stdin);
p = str;
printf("%d\n", solve(0));
return 0;
}