Cod sursa(job #161923)

Utilizator vlad.maneaVlad Manea vlad.manea Data 18 martie 2008 23:19:50
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <stdio.h>

char S[100005];

int p, ans;

int termen();
int factor();
int expresie();

int expresie()
{
	int x = termen();

	while (S[p] == '+' || S[p] == '-')
	{
		if (S[p] == '+')
		{
			++p;
			x += termen();
		}
		else
		{
			++p;
			x -= termen();
		}
	}

	return x;
}

int termen()
{
	int x = factor();

	while (S[p] == '*' || S[p] == '/')
	{
		if (S[p] == '*')
		{
			++p;
			x *= factor();
		}
		else
		{
			++p;
			x /= factor();
		}
	}

	return x;
}

int factor()
{
	int x = 0;

	if (S[p] == '(')
	{
		++p;
		x = expresie();
		++p;
	}
	else
	{
		while (S[p] <= '9' && S[p] >= '0')
		{
			x = x*10+S[p]-'0';
			++p;
		}
	}

	return x;
}

void read()
{
	freopen("evaluare.in", "r", stdin);

	scanf("%s", &S);
}

void write()
{
	freopen("evaluare.out", "w", stdout);

	printf("%d\n", ans);
}

void solve()
{
	ans = expresie();
}

int main()
{
	read();

	solve();

	write();

	return 0;
}