Cod sursa(job #694717)

Utilizator DSzprogDombi Szabolcs DSzprog Data 27 februarie 2012 23:01:38
Problema Evaluarea unei expresii Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <cstring>
#include <cstdio>
#include <cmath>

char data[100128];

int solve(int l, int r) {
	int i = l;
	int op1 = -1;
	int op2 = -1;
	int par = 0;
	int value = 0;
	for (int i = l; i < r; ++i) {
		if (data[i] == '(') {
			++par;
		} else if (data[i] == ')') {
			--par;
		} else {
			if (!par) {
				if (data[i] == '+' || data[i] == '-') {
					op1 = i;
				} else if (data[i] == '*' || data[i] == '/') {
					op2 = i;
				} else {
					value = value * 10 + data[i] - '0';
				}
			}
		}
	}
	if (op1 != -1) {
		if (data[op1] == '+') {
			return(solve(l, op1) + solve(op1 + 1, r));
		} else {
			return(solve(l, op1) - solve(op1 + 1, r));
		}
	} else if (op2 != -1) {
		if (data[op2] == '*') {
			return(solve(l, op2) * solve(op2 + 1, r));
		} else {
			return(solve(l, op2) / solve(op2 + 1, r));
		}
	} else {
		if (data[l] == '(' && data[r - 1] == ')') {
			return(solve(l + 1, r - 1));
		} else {
			return(value);
		}
	}
}

int main() {
	FILE * in = fopen("evaluare.in", "rt");
	FILE * out = fopen("evaluare.out", "wt");

	fscanf(in, "%s", data);
	fprintf(out, "%d\n", solve(0, strlen(data)));

	fclose(in);
	fclose(out);
}