Cod sursa(job #1861362)

Utilizator Joystick6208Catalin Topala Joystick6208 Data 28 ianuarie 2017 20:06:39
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <cstdio>
using namespace std;

char s[100005], *p = s;

int termen();
int factor();

int eval()
{
	int rez = termen();

	while(*p == '+' || *p == '-')
		if(*p == '+')
		{
			++p;
			rez += termen();
		}
		else
		{
			++p;
			rez -= termen();
		}

	return rez;
}

int termen()
{
	int rez = factor();

	while(*p == '*' || *p == '/')
		if(*p == '*')
		{
			++p;
			rez *= factor();
		}
		else
		{
			++p;
			rez /= factor();
		}

	return rez;
}

int factor()
{
	int rez = 0;

	if(*p == '(')
	{
		++p;
		rez = eval();
		++p;
	}
	else
		while(*p >= '0' && *p <= '9')
		{
			rez = (rez << 1) * 5 + *p - '0';
			++p;
		}

	return rez;
}

int main()
{

	freopen("evaluare.in", "r", stdin);
	freopen("evaluare.out", "w", stdout);

	scanf("%s", s);
	printf("%d", eval());

	return 0;
}