Cod sursa(job #2854217)

Utilizator Solo22Stefan Solomon Solo22 Data 21 februarie 2022 01:54:31
Problema Evaluarea unei expresii Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
char expresie[100001];
int ans, i, nr;
int convert_num(), termen(), factor(), eval();
int convert_num() {
	int rez = 0;
	for (; isdigit(expresie[i]);)
		rez = rez * 10 + (int)expresie[i] - 48, ++i;
	return rez;
}
int eval() {
	int r = termen();
	for (; expresie[i] == '+' || expresie[i] == '-';) {
		if (expresie[i] == '+') {
			++i, r += termen();
			break;
		}
		else if (expresie[i] == '-') {
			++i, r -= termen();
			break;
		}
	}
	return r;
}
int termen() {
	int r = factor();
	for (; expresie[i] == '*' || expresie[i] == '/';) {
		if (expresie[i] == '*') {
			++i, r *= factor();
			break;
		}
		else if (expresie[i] == '/') {
			++i, r /= factor();
			break;
		}
	}
	return r;
}
int factor() {
	long r = 0;
	if (expresie[i] == '(')
		++i, r = eval(), ++i;
	else
		r = convert_num();
	return r;
}
int main() {
	cin.getline(expresie, 100001);
	cout << eval();
	return 0;
}