Cod sursa(job #3142445)

Utilizator EricDimiC. Eric-Dimitrie EricDimi Data 21 iulie 2023 12:35:04
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <iostream>
#include <fstream>
#define N_MAX 100'010

using namespace std;

ifstream f("evaluare.in");
ofstream g("evaluare.out");

char S[N_MAX], *p = S;
int i;

long termen();
long factor();

long evaluare()
{
	long r = termen();
	while (*p == '+' || *p == '-')
	{
		switch(*p)
		{
			case '+' : ++p; r += termen(); break;
			case '-' : ++p; r -= termen(); break;
		}
	}
	return r;
}


long termen()
{
	long r = factor();
	while (*p == '*' || *p == '/')
	{
		switch(*p)
		{
			case '*' : ++p; r *= factor(); break;
			case '/' : ++p; r /= factor(); break;
		}
	}
	return r;
}

long factor()
{
	long r = 0;
	if (*p == '(')
	{
		++p;
		r = evaluare();
		++p;
	}
	else
	{
		while (*p >= '0' && *p <= '9')
		{
			r = r * 10 + ((*p) - '0');
			++p;
		}
	}
	return r;
}

int main()
{
	f.getline(S, N_MAX);
	g << evaluare();

    f.close();
    g.close();
    return 0;
}