Cod sursa(job #546351)

Utilizator tiriplicamihaiTiriplica Mihai Dragos tiriplicamihai Data 4 martie 2011 20:09:42
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <cstdio>
#include <string.h>

#define MaxN 100010

char S[MaxN];
long long i;

void cit()
{
	scanf("%s",&S);
}
long long termen();
long long factor();

//aduna toti termenii unei expresii sau subexpresii
long long eval()
{
	long long r=termen();
	while(S[i]=='+'||S[i]=='-')
	{
		if(S[i]=='+')
		{
			i++;
			r+=termen();
		}
		else
		if(S[i]=='-')
		{
			i++;
			r-=termen();
		}
	}
	return r;
}

//efectueaza inmultirile si impartirile
long long termen()
{
	long long r=factor();
	while(S[i]=='*'||S[i]=='/')
	{
		if(S[i]=='*')
		{
			i++;
			r*=factor();
		}
		else
		if(S[i]=='/')
		{
			i++;
			r/=factor();
		}
	}
	return r;
}

//returneaza un factor
long long factor()
{
	long long r=0;
	if(S[i]=='(')
	{
		i++;// se sare peste '('
		r=eval();
		i++;//se sare peste ')'
	}
	else
	while(S[i]>='0'&&S[i]<='9')
	{
		r=r*10 +(S[i]-'0');
		i++;
	}
	return r;
}



int main()
{
	freopen("evaluare.in","r",stdin);
	freopen("evaluare.out","w",stdout);
	cit();
	i=0;
	printf("%lld\n",eval());
	fclose(stdin);
	fclose(stdout);
	return 0;
}