Pagini recente » Monitorul de evaluare | Clasament lucian_blaga_cls_10 | Monitorul de evaluare | Diferente pentru home intre reviziile 902 si 467 | Cod sursa (job #172840)
Cod sursa(job #172840)
#include <stdio.h>
#include <string.h>
#include <ctype.h>
long i, poz, n, k;
char exp[100010];
long elem();
long eval(long mode)
{
long rez;
switch (mode)
{
case 1:
rez = eval(2);
for (; exp[poz] == '+' || exp[poz] == '-';)
{
poz++;
if (exp[poz - 1] == '+')
rez += eval(2);
else
rez -= eval(2);
}
return rez;
break;
case 2:
rez = elem();
for (; exp[poz] == '*' || exp[poz] == '/';)
{
poz++;
if (exp[poz - 1] == '*')
rez *= elem();
else
rez /= elem();
}
return rez;
break;
}
}
long elem()
{
long rez = 0;
if (exp[poz] == '(')
{
poz++;
rez = eval(1);
poz++;
}
else
while (isdigit(exp[poz]))
rez = rez * 10 + exp[poz] - '0', poz++;
return rez;
}
/*
long number()
{
long nr = 0;
if (exp[poz] != '(')
{
while (isdigit(exp[poz]))
nr = nr * 10 + exp[poz ++] - '0';
return nr;
}
poz ++;
nr = eval(), poz ++;
return nr;
}
long eval()
{
if (poz <= n - 1)
{
long rez = number();
for (; exp[poz] == '+' || exp[poz] == '-' || exp[poz] == '*' || exp[poz] == '/';)
{
if (exp[poz] == '+')
{
poz ++;
long k = number();
rez += k;
}
else
if (exp[poz] == '-')
{
poz ++;
long k = number();
rez -= k;
}
else
if (exp[poz] == '*')
{
poz ++;
long k = number();
rez *= k;
}
else
if (exp[poz] == '/')
{
poz ++;
long k = number();
rez /= k;
}
}
return rez;
}
}
*/
int main()
{
freopen ("evaluare.in", "rt", stdin);
freopen ("evaluare.out", "wt", stdout);
scanf("%s", exp);
n = strlen(exp);
poz = 0;
printf("%ld\n", eval(1));
return 0;
}