Cod sursa(job #1573439)

Utilizator PasarelAlex Oltean Pasarel Data 19 ianuarie 2016 18:10:05
Problema Evaluarea unei expresii Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.95 kb
// Acest cod va este oferit de:
// BITUL LIBER
// bitul-liber.ro

#include <stdio.h>
#include <ctype.h>

char s[100002];
int pos = 0;

int E();
int T();
int F();

int E() {
	int val = T();
	while (s[pos] == '+' || s[pos] == '-') {
		if (s[pos] == '+') {
			pos++;
			val += T();
		}
		else {
			pos++;
			val -= T();
		}
	}
	return val;
}

int T() {
	int val = F();
	while (s[pos] == '*' || s[pos] == '/') {
		if (s[pos] == '*') {
			pos++;
			val *= F();
		}
		else {
			pos++;
			val /= F();
		}
	}
	return val;
}

int F() {
	int val = 0;
	if (s[pos] == '-') {
		pos++;
		val = -F();
	}
	else if (s[pos] == '(') {
		pos++;
		val = E();
		pos++;
	}
	else if (isdigit(s[pos])) {
		while (isdigit(s[pos])) {
			val = val * 10 + s[pos] - '0';
			pos++;
		}
	}
	return val;
}

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