Pagini recente » Cod sursa (job #466543) | Cod sursa (job #61389) | Cod sursa (job #1500898)
#include <stdio.h>
int g_p;
int eval(char *str)
{
int r;
r = termen(str);
while (str[g_p] == '+' || str[g_p] == '-')
{
if (str[g_p] == '+')
{
g_p++;
r += termen(str);
}
if (str[g_p] == '-')
{
g_p++;
r -= termen(str);
}
}
return (r);
}
int termen(char *str)
{
int r;
r = factor(str);
while (str[g_p] == '*' || str[g_p] == '/' || str[g_p] == '%')
{
if (str[g_p] == '*')
{
g_p++;
r = r * factor(str);
}
if (str[g_p] == '/')
{
g_p++;
r /= factor(str);
}
if (str[g_p] == '%')
{
g_p++;
r %= factor(str);
}
}
return (r);
}
int factor(char *str)
{
int r;
r = 0;
if (str[g_p] == '(')
{
g_p++;
r = eval(str);
g_p++;
}
else
{
while (str[g_p] >= '0' && str[g_p] <= '9')
{
r = r * 10 + str[g_p] - '0';
g_p = g_p + 1;
}
}
return (r);
}
int main(int ac, char **av)
{
char *str;
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
str = (char*)malloc(sizeof(char) *100001);
scanf("%s", str);
printf("%d\n", eval(str));
return (0);
}