Cod sursa(job #145552)

Utilizator coderninuHasna Robert coderninu Data 28 februarie 2008 22:29:00
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <stdio.h>
#define Nmax 100001

char s[Nmax];
int i;

int expr();
int termen();
int factor();
int val();

int main()
{
	fscanf(fopen("evaluare.in", "r"), "%s", &s);
	fprintf(fopen("evaluare.out", "w"), "%d", expr());
	return 0;
}

int expr()
{
	int f=termen(), semn;
	while (s[i]=='+' || s[i]=='-')
	{
		if (s[i++]=='+') semn=1;
		else semn=-1;
		f+=termen()*semn;
	}
	return f;
}

int termen()
{
	int f=factor();
	char semn;
	while (s[i]=='*' || s[i]=='/')
	{
		semn=s[i++];
		if (semn=='*') f*=factor();
		else f/=factor();
	}
	return f;
}

int factor()
{
	int f;
	if (s[i]=='(')
	{
		i++;
		f=expr();
		i++;
		return f;
	}
	return val();
}

int val()
{
	int f=0;
	while (s[i]<='9' && s[i]>='0') f = f * 10 + s[i++]-'0';
	return f;
}