Cod sursa(job #716552)

Utilizator nalexandruIovan Alexandru Nicolae nalexandru Data 18 martie 2012 23:08:46
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>
#include <string.h>
#define NMax 100005
using namespace std;

fstream fin("evaluare.in",ios::in);
fstream fout("evaluare.out",ios::out);

char expr[NMax];
int n;

int factor(int &i);
int termen(int &i);
int expresie(int &i);

int factor(int &i)//calculeaza un numar sau o subexpresie
{
	int e=0;
	if(expr[i]=='(')
	{
		e=expresie(++i);
		++i;
	}
	else //avem numar
	{
		while(expr[i]>='0'&&expr[i]<='9')
		{ 
			e=e*10+expr[i]-'0';
			i++;
		}
	}
	return e;
}

int termen(int &i)//calculeaza un termen
{
	int f=factor(i);
	while(expr[i]=='*'||expr[i]=='/')
	{
		if(expr[i]=='*')
			f*=factor(++i);
		if(expr[i]=='/')
			f/=factor(++i);
	}
	return f;
}

int expresie(int &i)//aduna mai multi termeni
{
	int rez=termen(i);
	while(expr[i]=='+'||expr[i]=='-')
	{
		if(expr[i]=='+')
			rez+=termen(++i);
		if(expr[i]=='-')
			rez-=termen(++i);
	}
	return rez;
}

int main()
{
	int i=0;
	fin.getline(expr,NMax);
	n=strlen(expr);
	fout<<expresie(i);

	return 0;
}