Cod sursa(job #1200545)

Utilizator silidragosSilion Dragos silidragos Data 22 iunie 2014 19:53:16
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include<iostream>
#include<fstream>
#include<string>

using namespace std;


string S;
string::iterator it;
long eval();

long factor(){
	long r = 0;
	if (*it == '('){
		++it;
		r=eval();
		++it;
	}
	else{
		while (*it >= '0' && *it <= '9'){
			r = r * 10 + (*it - '0');
			if (it < S.end()-1) ++it;
			else break;
		}
	}

	return r;
}

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

}

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


int main(){
	ifstream f("evaluare.in", ios::in);//Change the name
	ofstream g("evaluare.out", ios::out);//Change the name
	
	f >> S;
	it = S.begin();

	g<<eval()<<'\n';

	f.close();
	g.close();
}