Cod sursa(job #757898)

Utilizator igsifvevc avb igsi Data 13 iunie 2012 18:21:32
Problema Evaluarea unei expresii Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.89 kb
#include <stdio.h>

char s[100005], *e;

long int term();
long int product();
long int expression();

int main()
{
	FILE *in = fopen("evaluare.in", "r");
	FILE *out = fopen("evaluare.out", "w");
	
	fgets(s, 100002, in);
	e = s;
	fprintf(out, "%ld\n", expression());
	
	fclose(in);
	fclose(out);
	return 0;
}

long int term()
{
	long int nr;
	nr = 0;
		
	if(*e == '(')
	{
		e++;
		nr = expression();
		e++;
	}
	else while('0' <= *e && *e <= '9')
	{
		nr = nr * 10 + ((*e) - '0');
		e++;
	}
	return nr;
}

long int product()
{
	long int prod;
	prod = term();
	while(*e == '*' || *e == '/')
		if(*e == '*')
		{
			e++;
			prod *= term();
		}
		else
		{
			e++;
			prod /= term();
		}
		
	return prod;
}

long int expression()
{
	long int sum;
	sum = product();
	while(*e == '+' || *e == '-')
		if(*e == '+')
		{	
			e++;
			sum += product();
		}
		else
		{
			e++;
			sum -= product();
		}
			
	return sum;	
}