Cod sursa(job #1051674)

Utilizator alexandru213Bracau Alexandru alexandru213 Data 10 decembrie 2013 13:29:14
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include<fstream>
using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
char s[100001],a[100001];
int b[100001],pr[260],nr,ok,n,vf1,vf2;
void calcul(){
	char ch;
	int rez;
	ch=a[vf1];
	switch(ch){
		case '-': rez=b[vf2-1]-b[vf2];
		case '+': rez=b[vf2-1]+b[vf2];
		case '/': rez=b[vf2-1]/b[vf2];
		case '*': rez=b[vf2-1]*b[vf2];}
	vf2--;
	vf1--;
	b[vf2]=rez;}
int main(){
	in>>s;
	n=strlen(s);
	pr['(']=1;
	pr['+']=pr['-']=2;
	pr['*']=pr['/']=3;
	nr=0;ok=0;
	for(int i=0;i<=n;i++){
		if(s[i]=='('){
			vf1++;
			a[vf1]='(';}
		else
		if(s[i]==')'){
			if(ok==1){
				vf2++;
				b[vf2]=nr;
				nr=0;
				ok=0;}
			while(a[vf1]!='(')
				calcul();
			vf1--;}
		else
		if(s[i]>='0'&&s[i]<='9'){
			nr=nr*10+s[i]-'0';
			ok=1;}
		else {
			if(ok==1){
				vf2++;
				b[vf2]=nr;
				nr=0;
				ok=0;}
			while(vf1>0&&pr[s[i]]<=pr[a[vf1]])
				calcul();
			vf1++;
			a[vf1]=s[i];}
	}
	if(ok==1){
		vf2++;
		b[vf2]=nr;
		nr=0;
		ok=0;}
	while(vf1>0)
		calcul();
	out<<b[1];
	return 0;}