Cod sursa(job #2165744)

Utilizator oldatlantianSerban Cercelescu oldatlantian Data 13 martie 2018 13:28:52
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fi("evaluare.in");
ofstream fo("evaluare.out");

const int N = 1e5 + 5;

char str[N];
int ptr;

static int eval();
static int priority_1();
static int num();

static int eval() {
	int ant = priority_1();
	bool flag;

	do {
		flag = false;

		switch (str[ptr++]) {
		case '+': {
			ant+= priority_1();
			flag = true;
			break; }
		case '-': {
			ant-= priority_1();
			flag = true;
			break; } } }
	while (flag);

	return ant; }

static int priority_1() {
	int ant = num();
	bool flag;

	do {
		flag = false;

		switch (str[ptr]) {
		case '*': {
			ptr+= 1;
			ant*= num();
			flag = true;
			break; }
		case '/': {
			ptr+= 1;
			ant/= num();
			flag = true;
			break; } }  }
	while (flag);

	return ant; }

static int num() {
	if (str[ptr] == '(') {
		ptr+= 1;
		return eval(); }

	int ant = 0, mul = 1;
	while (str[ptr] == '-') {
		ptr+= 1;
		mul*= -1; }

	while (isdigit(str[ptr])) {
		ant = ant * 10 + (str[ptr] - '0');
		ptr+= 1; }

	return ant * mul; }


int main() {
	fi >> str;
	fo << eval() << endl;

	return 0; }