Cod sursa(job #537113)

Utilizator cdascaluDascalu Cristian cdascalu Data 20 februarie 2011 09:47:01
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<fstream>
#include<string.h>
#define MAX 1000001
using namespace std;
char buf[MAX], *p;
long eval();
long factor();
long termen();
int main()
{
	ifstream f("evaluare.in");
	f.getline(buf,MAX);
	f.close();
	p = buf;
	ofstream g("evaluare.out");
	g<<eval();
	g.close();
	return 0;
}
long eval()
{
	long r = factor();
	while(*p == '+' || *p == '-')
	{
		if(*p == '+')
		{
			++p;
			r += factor();
		}
		if(*p == '-')
		{
			++p;
			r-=factor();
		}
	}
	return r;
}
long factor()
{
	long r = termen();
	while(*p == '*' || *p == '/')
	{
		if(*p == '*')
		{
			++p;
			r*=termen();
		}
		if(*p == '/')
		{
			++p;
			r/=termen();
		}
	}
	return r;
}
long termen()
{
	long r = 0;
	if(*p == '(')
		{
			++p;
			r = eval();
			++p;
		}
	else
		while(*p>='0' && *p<='9')
		{
			r = r*10 + *p - '0';
			++p;
		}
	return r;
}