Cod sursa(job #1500898)

Utilizator florea.andreiFlorea Andrei Mihai florea.andrei Data 12 octombrie 2015 20:45:49
Problema Evaluarea unei expresii Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.12 kb
#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);
}