Cod sursa(job #561681)

Utilizator mihai995mihai995 mihai995 Data 21 martie 2011 09:01:17
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
using namespace std;

int poz=0;
char s[100002];

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

int expresie(),factor(),termen(),numar();

int expresie()
{
	int sum=termen();
	while (s[poz]=='+' || s[poz]=='-')
	{
		if (s[poz]=='+')
		{
			poz++;
			sum+=termen();
		}
		else
		{
			poz++;
			sum-=termen();
		}
	}
	return sum;
}

int termen()
{
	int sum=factor();
	while (s[poz]=='*' || s[poz]=='/')
		if (s[poz]=='*')
		{
			poz++;
			sum*=factor();
		}
		else
		{
			poz++;
			sum/=factor();
		}
	return sum;
}

int factor()
{
	int val,semn=1;
	while (s[poz]=='+' || s[poz]=='-')
		if (s[poz++]=='-')
			semn=-semn;
	if (s[poz]=='(')
	{
		poz++;
		val=expresie();
		poz++;
		return val;
	}
	return numar();
}

int numar()
{
	int nr=0;
	while (s[poz]>='0' && s[poz]<='9')
		nr=nr*10+s[poz++]-'0';
	return nr;
}

int main()
{
	in.getline(s,100001);
	out<<expresie()<<"\n";
	return 0;
}