Cod sursa(job #913087)

Utilizator avram_florinavram florin constantin avram_florin Data 13 martie 2013 09:10:05
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include<cstdio>
#include<cstring>

using namespace std;

const char InFile[]="evaluare.in";
const char OutFile[]="evaluare.out";
const int MaxN=100005;

char Str[MaxN], *p=Str;

long factor();
long termen();

long eval()
{
	long r=termen();
	while( *p == '+' || *p == '-' )
		{
			switch( *p )
			{
				case '+' :
					++p;
					r += termen();
					break;
				case '-' :
					++p;
					r -= termen();
					break;
			}
	    }
	return r;
}

long termen()
{
	long r=factor();
	while( *p == '*' || *p == '/' )
		{
			switch( *p )
			{
				case '*' :
					++p;
					r *= factor();
					break;
				case '/' :
					++p;
					r /= factor();
					break;
			}
		}
	return r;
}

long factor()
{
	long r=0;
	if( *p == '(' )
		{
			++p;
			r=eval();
			++p;
		}
		else
		for( ; *p >= '0' && *p <= '9' ; r=r*10 +*p-'0', ++p );
	return r;
}

int main()
{
	FILE *fin,*fout;
	fin=fopen(InFile, "rt");
	fout=fopen(OutFile, "wt");
	fgets( Str, MaxN, fin);
	fprintf(fout,"%ld", eval() );
	return 0;
}