Cod sursa(job #150114)

Utilizator scvalexAlexandru Scvortov scvalex Data 6 martie 2008 16:34:08
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <fstream>

using namespace std;

char exp[100001];

int pos(0);

int getNumber() {
	int n(0);
	while (isdigit(exp[pos])) {
		n = n*10 + exp[pos] - '0';
		++pos;
	}
	return n;
}

int getExpression();

int getFactor() {
	int a;
	if (exp[pos] == '(') {
		++pos;
		a = getExpression();
		++pos;
	} else 
		a = getNumber();
	return a;
}

int getTerm() {
	int a = getFactor();
	while ((exp[pos] == '*') || (exp[pos] == '/')) {
		++pos;
		if (exp[pos - 1] == '*')
			a *= getFactor();
		else
			a /= getFactor();
	}
	return a;
}

int getExpression() {
	int a = getTerm();
	while ((exp[pos] == '+') || (exp[pos] == '-')) {
		++pos;
		if (exp[pos - 1] == '+')
			a += getTerm();
		else
			a -= getTerm();
	}
	return a;
}

int main(int argc, char *argv[]) {
	FILE *fi = fopen("evaluare.in", "r");
	fscanf(fi, "%s", exp);
	fclose(fi);

	FILE *fo = fopen("evaluare.out", "w");
	fprintf(fo, "%d\n", getExpression());
	fclose(fo);

	return 0;
}