Cod sursa(job #1417038)

Utilizator ArkinyStoica Alex Arkiny Data 9 aprilie 2015 14:25:13
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include<fstream>
#include<iostream>
using namespace std;

#define MAX 100001
char s[MAX];

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

char operators[3][3]={"+-","*/",""};
char *p=0;

int eval(int level);

int operation(int level,int nr,int &a,int b)
{
	if(level==0)
	{
		if(nr==0)
			a+=b;
		else if(nr==1)
			a-=b;
	}
	else if(level==1)
	{
		if(nr==0)
			a*=b;
		else
			a/=b;
	}
	return a;
}

int op()
{
	int x=0;
	if(*p>='0' && *p<='9')
	{
		while(*p>='0' && *p<='9')
		{
		  x=x*10 + *p-'0';
		  ++p;
		}
	}
	else
		if(*p=='(')
		{
			++p;x=eval(0);++p;
		}
	return x;
}

int eval(int level)
{
    int x=0;
	if(level+1<=1)
			   x=eval(level+1);
	else 
			   x=op();

	while(*p==operators[level][0] || *p==operators[level][1])
	{
		if(*p==operators[level][0])
		{
			++p;
			if(level+1<=1)
				operation(level,0,x,eval(level+1));
			else
			    operation(level,0,x,op());
		}
		else if(*p==operators[level][1])
		{
			++p;
			if(level+1<=1)
				operation(level,1,x,eval(level+1));
			else 
			    operation(level,1,x,op());
			cout<<operators[level][1];
		}
	}
   return x; 
}

int main()
{
	in>>s;
	p=s;
	out<<eval(0);
	return 0;
}