Cod sursa(job #267167)

Utilizator yoyolichIoana Ardeleanu yoyolich Data 26 februarie 2009 20:26:11
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include<stdio.h>
#define nmax 100010
FILE *f=fopen("evaluare.in","r"), *g=fopen("evaluare.out","w");
char s[nmax],*p;

long factor();
long termen();

long eval()
{
	long r=termen();
	while(*p=='+' || *p=='-')
	{
		if(*p=='+')
		{
			p++;
			r+=termen();
		}
		else if(*p=='-')
		{
			p++;
			r-=termen();
		}
	}
	
	return r;
}

long termen()
{
	long r=factor();
	while(*p=='*' || *p=='/')
	{
		if(*p=='*')
		{
			p++;
			r*=factor();
		}
		else if(*p=='/')
		{
			p++;
			r/=factor();
		}
	}
	return r;
}

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

int main()
{
	fgets(s,nmax,f);p=s;
	fprintf(g,"%ld\n",eval());
	fclose(f);
	fclose(g);
	return 0;
}