Cod sursa(job #697657)

Utilizator PatrikStepan Patrik Patrik Data 29 februarie 2012 10:25:30
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
	#include<stdio.h>
	FILE *f , *g ;
	char s[100002] ;
	long t , i ;
	
	void citire();
	long calc();
	long term();
	long fact();
	void tipar();
	
	int main()
	{
		citire();
		tipar();
		return 0;
	}
	
	void citire()
	{
		f=fopen("evaluare.in" , "r" );
		fscanf(f , "%s" , s );
		fclose(f);
	}
	
	void tipar()
	{
		g=fopen("evaluare.out" , "w" );
		fprintf(g , "%ld" , calc());
		fclose(g);
	}
	
	long calc()
	{
		long rez = term();
		while(s[i] == '+' || s[i] == '-')
			if(s[i] == '+')
			{
				i++;
				rez+=term();
			}
			else
			{
				i++;
				rez-=term();
			}
		return rez;
	}
	
	long term()
	{
		long t = fact();
		while(s[i] == '*' || s[i] == '/')
			if(s[i] == '*')
			{
				i++;
				t*=fact();
			}
			else
			{
				i++;
				t/=fact();
			}
		return t;
	}
	
	long fact()
	{
		long f = 0;
		if(s[i] == '(')
		{
			i++;
			f = calc();
			i++;
		}
		while(s[i] >= '0' && s[i] <= '9')
			f  = f*10 + s[i++]-48;
		return f;
	}