Cod sursa(job #148912)

Utilizator peanutzAndrei Homorodean peanutz Data 4 martie 2008 23:11:50
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <stdio.h>
#include <string.h>

#define NMAX 100010


char s[NMAX];
int n;
int i;

long first();
long second();
long third();

long third()
{
	int op = 1;
	long nr = 0;


	if(s[i] == '-')
	{
		op = -1;
		++i;
	}
	if(s[i] == '+') ++i;


	if(s[i] == '(')
	{
		++i;
		nr = first();
		++i;
		return nr * op;
	}

	for(; s[i] >= '0' && s[i] <= '9' && i < n; )
	{
		nr = nr * 10 + (s[i] - '0');
		++i;
	}
	return nr*op;
}


long second()
{
	int res = third();
	while(i < n && (s[i] == '*' || s[i] == '/'))
	{
		if(s[i] == '*')
		{
			++i;
			res = res * third();
		}
		else
		{
			++i;
			res = res / third();
		}
	}
	return res;
}


long first()
{
	long res = second();
	int op;
	while(i < n && (s[i] == '+' || s[i] == '-'))
	{
		if(s[i] == '-') op = -1;
		else op = 1;
		++i;

		res += op * second();
	}
	return res;
}


int main()
{
	freopen("evaluare.in", "r", stdin);
	freopen("evaluare.out", "w", stdout);

	scanf("%s", s);
	n = strlen(s);

	printf("%ld\n", first());

	return 0;
}