Cod sursa(job #3218093)

Utilizator DobraVictorDobra Victor Ioan DobraVictor Data 25 martie 2024 22:39:39
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include <fstream>
#include <stdint.h>
#include <string.h>

const int32_t MAX_LEN = 100000;

char str[MAX_LEN + 1];
int32_t len, pos = 0;

int32_t Add();

int32_t Val() {
	int32_t val = 0;
	for(; pos != len && str[pos] >= '0' && str[pos] <= '9'; ++pos) {
		val *= 10;
		val += str[pos] - '0';
	}

	return val;
}
int32_t Paran() {
	if(str[pos] == '(') {
		++pos;
		int32_t val = Add();
		++pos;
		return val;
	} else {
		return Val();
	}
}
int32_t Mult() {
	int32_t res = Paran();

	while(pos != len && (str[pos] == '*' || str[pos] == '/')) {
		char op = str[pos];
		++pos;
		int32_t val = Paran();

		if(op == '*') {
			res *= val;
		} else {
			res /= val;
		}
	}

	return res;
}
int32_t Add() {
	int32_t res = Mult();

	while(pos != len && (str[pos] == '+' || str[pos] == '-')) {
		char op = str[pos];
		++pos;
		int32_t val = Mult();

		if(op == '+') {
			res += val;
		} else {
			res -= val;
		}
	}

	return res;
}

int main() {
	std::ifstream fin("evaluare.in");
	std::ofstream fout("evaluare.out");

	fin.getline(str, MAX_LEN + 1);
	len = strnlen(str, MAX_LEN);

	fout << Add();

	fin.close();
	fout.close();

	return 0;
}