Cod sursa(job #1237389)

Utilizator gabriel.badeaGabriel Badea gabriel.badea Data 3 octombrie 2014 23:03:05
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include<iostream>
#include<stdio.h>
#include<vector>
#include<string>
#include<stack>
using namespace std;

#pragma warning(push)
#pragma warning(disable: 4996) //4996 for _CRT_SECURE_NO_WARNINGS equivalent

const long MAX = 100010;
char S[MAX], *p = S;

int termen();
int factor();

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

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

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

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

	scanf("%s", S);
	printf("%d\n", eval());

	return 0;
}

#pragma warning(pop)