Cod sursa(job #524434)

Utilizator stay_awake77Cangea Catalina stay_awake77 Data 21 ianuarie 2011 14:47:34
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include<stdio.h>
#include<string.h>

char S[100010],*p=S,cifre[11]="0123456789";

long termen();
long factor();

long eval() 
{
	long r=termen();
	while (*p=='+'||*p=='-')
	{
		switch (*p)
		{
			case'+':
				++p;
				r+=termen();
				break;
			case'-':
				++p;
				r-=termen();
				break;
		}
	}
	return r;
}

long termen() 
{
	long r=factor();
	while (*p=='*'||*p=='/') 
	{
		switch (*p) 
		{
			case'*':
				++p;
				r*=factor();
				break;
			case'/':
				++p;
				r/=factor();
				break;
		}
	}
	return r;
}

long factor() 
{
    long r=0;
    if (*p=='(')
	{
        ++p;
		r=eval();
		++p;
    }
	else
        while(*p>='0'&&*p<='9')
			r=r*10+*(++p-1)-'0';
    return r;
}

int main() 
{ 
	freopen("evaluare.in", "r",stdin);
	freopen("evaluare.out", "w",stdout);
	
    gets(S);
    printf("%ld\n", eval());
	
    return 0;
}