Cod sursa(job #563092)

Utilizator valentin.harsanValentin Harsan valentin.harsan Data 24 martie 2011 14:06:50
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include<iostream>
#include<fstream>
using namespace std;

int expresie();
int termen();
int factor();

char s[100001];
int p;

int main() {
	freopen("evaluare.in","r",stdin);
	freopen("evaluare.out","w",stdout);
	scanf("%s",&s);
	printf("%d",expresie());
	return 0;
}

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 ssum=factor();
	while(s[p]=='*' || s[p]=='/') {
		if(s[p]=='*') {
			++p;
			ssum*=factor();
		}
		if(s[p]=='/') {
			++p;
			ssum/=factor();
		}
	}
	return ssum;
}
int factor() {
	int val=0,semn=1;
	if(s[p]=='-') {
		++p;
		semn=-1;
	}
	if(s[p]=='+') ++p;
	if(s[p]=='(') {
		++p;
		val=expresie();
		++p;
		return val;
	}
	while(s[p]>='0' && s[p]<='9') {
		val=val*10+s[p++]-'0';
	}
	return val;
}