Cod sursa(job #353116)

Utilizator Binary_FireFlorin Pogocsan Binary_Fire Data 4 octombrie 2009 11:09:39
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <iostream>
#include <fstream>

using namespace std;

#define NMAX 100100
#define fin  "evaluare.in"
#define fout "evaluare.out"

char buff[NMAX], *p;

int eval();
int fact();
int termen();

int termen()
{
	int ret = 0;

	if ( *p == '(' )
		++p, ret = eval(), ++p;
	else
		while ( '0' <= *p && *p <= '9' )
			ret = ret * 10 + *p - '0', ++p;

	return ret;
}

int fact()
{
	int ret = termen();

	while ( *p == '*' || *p == '/' )
	{
		if ( *p == '*' )
			++p, ret *= termen();
		else
			++p, ret /= termen();
	}

	return ret;
}

int eval()
{
	int ret = fact();

	while ( *p == '+' || *p == '-' )
	{
		if ( *p == '+' )
			++p, ret += fact();
		else
			++p, ret -= fact();
	}

	return ret;
}

int main()
{
	ifstream f1(fin);
	ofstream f2(fout);

	f1.getline(buff, NMAX);

	p = buff;
	f2 << eval() << endl;

	return 0;
}