Cod sursa(job #184719)

Utilizator andrei_h5n1Haidau Andrei andrei_h5n1 Data 24 aprilie 2008 09:53:57
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <stdio.h>

char s[100010];
long i;

long termen();
long factor();

long eval()
{
	long r=termen();

	while(s[i]=='+' || s[i]=='-')
	{
		if(s[i]=='+')
		{
			++i;
			r+=termen();
		}
		else
		{
			++i;
			r-=termen();
		}
	}
	return r;
}
long termen()
{
	long r=factor();

	while(s[i]=='*' || s[i]=='/')
	{
		if(s[i]=='*')
		{
			++i;
			r*=factor();
		}
		else
		{
			++i;
			r/=factor();
		}
	}
	return r;
}
long factor()
{
	long r=0;
	if(s[i]=='(')
	{
		++i;
		r=eval();
		++i;
	}
	else
		while(s[i]<='9' && s[i]>='0')
		{
			r=r*10+s[i]-'0';
			++i;
		}
	return r;
}
int main()
{
	freopen("evaluare.in", "r", stdin);
	freopen("evaluare.out", "w", stdout);

	gets(s);
	printf("%ld", eval());

	return 0;
}