Cod sursa(job #356897)

Utilizator BlacKnighTAsofroniei Alexandru BlacKnighT Data 17 octombrie 2009 13:00:52
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<stdio.h>
#include<ctype.h>
char E[100000],*c;
int suma(), prod(),par(),num();
void readd(),solve();
int main()
{
	readd();
	solve();
	return 0;
}
void readd()
{
	freopen("evaluare.in","r",stdin);
	freopen("evaluare.out","w",stdout);
	c=E;
	scanf("%s",c);
}
void solve()	
{
	printf("%d",suma());
}
int suma()
{
	int ret=prod();
	while(*c=='+'||*c=='-')
	{
		if(*c=='+')
		{
			c++;
			ret+=prod();
		}
		else
		{
			c++;
			ret-=prod();
		}
	}
	return ret;
}
int prod()
{
	int ret=par();
	while(*c=='*'||*c=='/')
	{
		if(*c=='*')
		{
			c++;
			ret*=par();
		}
		else
		{
			c++;
			ret/=par();
		}
	}
	return ret;
}
int par()
{	
	int ret;
	if(*c=='(')
	{
		c++;
		ret=suma();
		c++;
	}
	else
	{
		ret=num();
	}
	return ret;
}
		

int num()
{
	int ret=0;
	while(isdigit(*c))//isdigit->ctype.h
	{
		ret*=10;
		ret+=*c-'0';
		c++;
	}
	return ret;
}