Cod sursa(job #787364)

Utilizator danalex97Dan H Alexandru danalex97 Data 13 septembrie 2012 11:17:27
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>
using namespace std;

const int Nmax = 100010;

char Str[Nmax], *p=Str; // p pointeaza la Str

ifstream F("evaluare.in");
ofstream G("evaluare.out");

long Eval();
long Term();
long Fact();

long Eval()
{
	long Rez = Term();
	while ( *p == '+' || *p == '-' )
		switch( *p )
		{
			case '+':
				++p;
				Rez += Term();
				break;
			case '-':
				++p;
				Rez -= Term();
				break;
		}
	return Rez;
}

long Term()
{
	long Rez = Fact();
	while ( *p == '*' || *p == '/' )
		switch( *p )
		{
			case '*':
				++p;
				Rez *= Fact();
				break;
			case '/':
				++p;
				Rez /= Fact();
				break;
		}
	return Rez;
}

long Fact()
{
	long Rez = 0;
	if ( *p == '(' )
	{
		++p;
		Rez = Eval();
		++p;
	}
	else
		for ( ; *p >= '0' && *p <= '9' ; ++p )
			Rez=Rez*10+ *p - '0';
	return Rez;
}

int main()
{
	F.getline(Str,Nmax,'\n');
	G<<Eval()<<'\n';
}