Cod sursa(job #531895)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 10 februarie 2011 15:39:15
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include<stdio.h>
#include<string>
#define i64 long long

FILE*f=fopen("evaluare.in","r");
FILE*g=fopen("evaluare.out","w");

int i = 1,N;
char A[100010];

i64 termen();
i64 factor();

i64 evaluare () {
	i64 R = termen();
	
	while ( A[i] == '+' || A[i] == '-' ){
		
		if ( A[i] == '+' ){
			++i;
			R += termen ();
		}
		else{
			++i;
			R -= termen();
		}
		
	}
	
	return R;
}

i64 termen () {
	
	i64 R = factor();
	
	while ( A[i] == '*' || A[i] == '/' ){
		if ( A[i] == '*' ){
			++i;
			R *= factor();
		}
		else{
			++i;
			R /= factor();
		}
		
	}
	
	return R;
}

i64 factor () {
	
	i64 R = 0;
	if ( A[i] == '(' ){
		++i;
		R = evaluare();
		++i;
	}
	else{
		while ( A[i] >= '0' && A[i] <= '9' ){
			R = R * 10 + A[i] - '0' ;
			++i;
		}
	}
	
	return R;
}

int main () {
	fscanf(f,"%s",A+1);
	N = strlen(A+1);
	
	fprintf(g,"%lld\n",evaluare() );
	
	fclose(f);
	fclose(g);
	
	return 0;
}