Cod sursa(job #1861299)

Utilizator PaulTPaul Tirlisan PaulT Data 28 ianuarie 2017 19:18:08
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>
#include <cctype>
#define ll long long
using namespace std;

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

const int dim = 100010;
char s[dim];
char *p = s;
bool ok;

ll Evaluare();    // evalueaza rezultatul unei expresii/subexpresii
ll Termen();	  // returneaza un termen
ll Factor();	  // returneaza un factor

int main()
{
	fin.getline(s, dim);
	fout << Evaluare();
	
	fin.close();
	fout.close();
}

ll Evaluare()
{
	ll r = Termen();
	while ( *p == '+' || *p == '-' )
	{
		switch ( *p )
		{
			case '+' :
				p++;
				r += Termen();
				break;
			case '-' :
				p++;
				r -= Termen();
				break;
		}
	}
	return r;
}

ll Termen()
{
	ll r = Factor();
	while ( *p == '*' || *p == '/' )
		switch ( *p )
		{
			case '*' :
				p++;
				r *= Factor();
				break;
			case '/' :
				p++;
				r /= Factor();
				break;
		}
	return r;
}

ll Factor()
{
	ll r(0);
	if ( *p == '(' )
	{
		p++;
		r = Evaluare();
		p++;
	}
	else
		while ( isdigit(*p) )
		{
			r = r * 10 + (*p - '0');
			p++;
		}
	return r;
}