Cod sursa(job #670713)

Utilizator RobertBBadea Corneliu Robert RobertB Data 29 ianuarie 2012 20:55:27
Problema Evaluarea unei expresii Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <iostream>
#include <string.h>
#include <fstream>
using namespace std;
char sir[100000];
 
 
ifstream f("evaluare.in");
ofstream g("evaluare.out");
 
int eval(int x, int y)
{
	int i,ok=1;
	int k=0;
	if(sir[x]=='(' && sir[y]==')')
		for(i=y;i>=x;i--) {
			if(sir[i]=='(') {
				k++;
			} else if (sir[i]==')') {
				k--;
			} else if (sir[i]=='+' && k==0) {
				return eval(x,i-1) + eval(i+1,y);
			} else if (sir[i]=='-' && k==0) {
				return eval(x,i-1) - eval(i+1,y);
			if(k==0) {
				ok=0;
				break;
			}
		}
		if(ok) {
			return eval(x+1,y-1);
		}
	}
		
	
	
	for(i=y;i>=x;i--) {
		if(sir[i]=='(') {
			k++;
		} else if (sir[i]==')') {
			k--;
		} else if (sir[i]=='+' && k==0) {
			return eval(x,i-1) + eval(i+1,y);
		} else if (sir[i]=='-' && k==0) {
			return eval(x,i-1) - eval(i+1,y);
		}
	}
	k=0;
	for(i=y;i>=x;i--) {
		if(sir[i]=='(') {
			k++;
		} else if (sir[i]==')') {
			k--;
		} else if (sir[i]=='*' && k==0) {
			return eval(x,i-1) * eval(i+1,y);
		} else if (sir[i]=='/' && k==0) {
			return eval(x,i-1) / eval(i+1,y);
		}	          
	}
	char nr[100];
	strncpy(nr, &sir[x], y - x + 1);
	nr[y - x + 1] = '\0';
	int ret;
	sscanf(nr, "%i", &ret);
	return ret;
}

int main()
{
	f.getline(sir,100000);
	g<<eval(0,strlen(sir)-1);
}