Cod sursa(job #548252)

Utilizator andreirulzzzUPB-Hulea-Ionescu-Roman andreirulzzz Data 7 martie 2011 11:07:58
Problema Evaluarea unei expresii Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <cstdio>
using namespace std;

char x,b[100001];
int n,m,nr,a[100001];

void calcul();

int main(){
	freopen("evaluare.in","r",stdin);
	freopen("evaluare.out","w",stdout);
	nr=0;
	x='1';
	while (x!=0&&x!='\n'){
		scanf("%c",&x);		
		if (x>='0'&&x<='9') nr*=10,nr+=x-'0';
		else {
			a[++n]=nr;
			b[++m]=x;
			nr=0;
			}
		if (b[n]==')')calcul();

		}
	int i,j;
	i=1;j=n;
	while (i<=j){
		if (b[i]=='*') a[i+1]=a[i]*a[i+1],b[i]='+',a[i]=0;
		if (b[i]=='/') a[i+1]=a[i]/a[i+1],b[i]='+',a[i]=0;
		++i;
		}
		
	for(i=1;i<=n;++i)
		if (b[i]=='+') a[1]+=a[i+1];
		else a[1]-=a[i+1];
	
	printf("%d\n",a[1]);
	return 0;	
}

void calcul(){
	int sum,i=n,j=n,k;
	if (b[i-1]=='('&&b[j]==')'){
		a[i-1]=a[i];a[i]=0;
		b[i-1]=b[i]=0;
		n-=2;m-=2;
		nr=a[i-1];
		return;
		}
	while (b[i]!='(') --i;++i;
	k=i;
	
	while (i<j){
		if (b[i]=='*') a[i+1]=a[i]*a[i+1],b[i]='+',a[i]=0;
		if (b[i]=='/') a[i+1]=a[i]/a[i+1],b[i]='+',a[i]=0;
		++i;
		}
	sum=a[k];
	for(i=k;i<j;++i)
		if (b[i]=='+') sum+=a[i+1];
		else sum-=a[i+1];
	
	--k;
	for(i=j;i>=k;--i) b[i]=0,a[i]=0;
	a[k]=sum;
	nr=sum;
	n=m=k-1;
	return;
}