Cod sursa(job #156412)

Utilizator vlad_popaVlad Popa vlad_popa Data 12 martie 2008 15:28:24
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <stdio.h>
#include <string.h>

#define MAXN 100001

char s[MAXN];
int p = 0;

int solve1();
int solve2();
int solve3();

int
 main ()
{
	freopen ("evaluare.in", "rt", stdin);
	freopen ("evaluare.out", "wt", stdout);

	gets (s);
	printf ("%d\n", solve1());

	return 0;
}

int solve1()
{
	int sol = solve2();
	while (s[p] == '+' || s[p] == '-')
	{
		if (s[p] == '+')
		{
			++p;
			sol += solve2();
		}
		if (s[p] == '-')
		{
			++p;
			sol -= solve2();
		}
	}

	return sol;
}

int solve2()
{
	int sol = solve3();

	while (s[p] == '*' || s[p] == '/')
	{
		if (s[p] == '*')
		{
			++p;
			sol *= solve3();
		}
		if (s[p] == '/')
		{
			++p;
			sol /= solve3();
		}
	}

	return sol;
}

int solve3()
{
	int sol = 0;

	if (s[p] == '(')
	{
		++p;
		sol += solve1();
		++p;
	}
	else for (; s[p] >= '0' && s[p] <= '9'; sol = (sol * 10 + s[p] - '0'), ++p);

	return sol;
}