Cod sursa(job #150589)

Utilizator xtephanFodor Stefan xtephan Data 7 martie 2008 08:21:38
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include<stdio.h>
#include<string.h>

char S[100010], *p=S;


void cit();
long eval();
long termen();
long factor();


int main() {
	freopen("evaluare.in", "r", stdin);
	freopen("evaluare.out", "w", stdout);

	cit();
	printf("%ld",eval());

	return 0;
}

void cit() {
	scanf("%s",&S);
}

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-'0';
			++p;
	       }

	}

	return r;
}