Cod sursa(job #705104)

Utilizator runnerbloodVoda Alexandru-Ioan runnerblood Data 3 martie 2012 07:33:29
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
//expresie
#include <fstream>
using namespace std;

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

const int N=100010;
int p;
char s[N];
int expresie();
int termen();
int factor();

int expresie() {
	int sum=termen();
	while (s[p]=='+' || s[p]=='-') {
		if (s[p]=='+') {
			p++;
			sum+=termen();
		}
		else {
			p++;
			sum-=termen();
		}
	}
	return sum;
}

int termen() {
	int val=factor();
	while (s[p]=='*' || s[p]=='/') {
		if (s[p]=='*') {
			p++;
			val*=s[p];
		}
		else {
			p++;
			val/=s[p];
		}
	}
	return val;
}

int factor() {
	int val=0, semn=1;
	while (s[p]=='-') {
		p++;
		semn=-semn;
	}
	while (s[p]=='(') {
		p++;
		val=expresie();
		p++;
		return val*semn;
	}
	while (s[p]>='0' && s[p]<='9') {
		val=val*10+(s[p]-'0');
		p++;
	}
	return val*semn;
}

int main() {
	in.getline(s, N);
	out << expresie;
}