Cod sursa(job #2869911)

Utilizator BogdanRaresBogdan Rares BogdanRares Data 11 martie 2022 22:07:24
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>

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

char s[100001];
int i;

int expresie();//A
int termen();//B
int factor();//C
//A->B->C->A

int expresie()//A
{
	long long r = termen();//A->B
	while (s[i] == '+' || s[i] == '-')
	{
		if (s[i] == '+')
		{
			i++;
			r += termen();
		}
		else
		{
			i++;
			r -= termen();
		}
	}
	return r;
}

int termen()//B
{
	long long r = factor();//B->C
	while (s[i] == '*' || s[i] == '/')
	{
		if (s[i] == '*')
		{
			i++;
			r *= factor();
		}
		else
		{
			i++;
			r /= factor();
		}
	}
	return r;
}

int factor()//C
{
	long long r;
	if (s[i] == '(')
	{
		i++;//sarim peste paranteza
		r = expresie();
		i++;//sarim peste pareanteza
	}
	else
	{//valoare
		r = 0;
		while (isdigit(s[i]))
		{
			r = r * 10 + s[i] - '0';
			i++;
		}
	}
	return r;
}

int main()
{
	fin >> s;
	i = 0;
	fout << expresie();
	return 0;
}