Cod sursa(job #818893)

Utilizator Stefex09Stefan Teodorescu Stefex09 Data 18 noiembrie 2012 11:17:31
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <iostream>
#include <fstream>

using namespace std;

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

char S[100010], *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 ()
{
	in >> S;
	out << eval ();
	
	return 0;
}