Cod sursa(job #974536)

Utilizator mircea.dobreanuMircea Dobreanu mircea.dobreanu Data 17 iulie 2013 14:35:40
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<fstream>
using namespace std;
const int MAXN=100010;

char e[MAXN],*p=e;
int lg;

void read();
int eval();
int termen();
int factor();
void write();

int main()
{
	read();
	write();
	return 0;
}
void read()
{
	ifstream fin("evaluare.in");
	char c;
	fin.get(c);
	for(lg=1; c!='\n'; ++lg)
	{
		e[lg-1]=c;
		fin.get(c);
	}
	--lg;
	fin.close();
}
int eval()
{
	int r=termen();
	while (*p=='+' || *p=='-')
	{
		if (*p=='+')
		{
			++p;
			r+=termen();
		}
		else if (*p=='-')
		{
			++p;
			r-=termen();
		}
	}
	return r;
}
int termen()
{
	int r=factor();
	while (*p=='*' || *p=='/')
	{
		if (*p=='*')
		{
			++p;
			r*=factor();
		}
		else if (*p=='/')
		{
			++p;
			r/=factor();
		}
	}
	return r;
}
int factor()
{
	int r=0;
	if (*p=='(')
	{
		++p;
		r=eval();
		++p;
	}
	else
	{
		while (*p>='0' && *p<='9')
		{
			r=r*10+(*p-'0');
			++p;
		}
	}
	return r;
}
void write()
{
	ofstream fout("evaluare.out");
	fout<<eval()<<'\n';
	fout.close();
}