Cod sursa(job #895811)

Utilizator dspMihaiDespotovici Mihai dspMihai Data 27 februarie 2013 12:39:06
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <cstdio>
#include <iostream>
using namespace std;
char S[100001], *p=S, chr;
long i,n=-1;

long adunare();
long factor();

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

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

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

int main ()
{
	FILE *f,*g;
	f=fopen("evaluare.in", "r");
	g=fopen("evaluare.out", "w");
	
	//CITIRE S
	fscanf(f, "%c", &chr);
	while (chr!=10)
	{
		S[++n]=chr;
		if (fscanf(f, "%c", &chr)==EOF) break;
	}
	
	
	
	
	fprintf(g, "%d", adunare());
	//for (i=0; i<=n; i++) fprintf(g, "%c", S[i]);
	fclose(f); fclose(g);
	return 0;
}