Cod sursa(job #689222)

Utilizator runnerbloodVoda Alexandru-Ioan runnerblood Data 24 februarie 2012 11:03:54
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<fstream>
using namespace std;

const int N = 100010;

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

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 prod=factor();
	while(s[p]=='*' || s[p]=='/') {
		if (s[p]=='*') {
			p++;
			prod*=factor();}
		else {
			p++;
			prod/=factor();}
	}
	return prod;
}

int factor() {
	int vol=0, semn=1;
	while (s[p]=='-') {
		semn=-semn;
		p++;}
	if (s[p]=='(') {
		p++;
		vol=expresie();
		p++;
		return semn*vol;}
	while (s[p]>='0' && s[p]<='9') {
		vol=vol*10+(s[p]-'0');
		p++;
	}
	return semn*vol;
}
int main() {
	in.getline(s,N);
	out << expresie() << "\n";
	return 0;
}