Cod sursa(job #289683)

Utilizator cotofanaCotofana Cristian cotofana Data 26 martie 2009 21:43:44
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <stdio.h>
#define dim 100010

char s[dim], *p=s;

long long termen();
long long factor();

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

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

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

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