Cod sursa(job #1605508)

Utilizator qwertyuiTudor-Stefan Berbinschi qwertyui Data 19 februarie 2016 08:50:02
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <utility>

using namespace std;

ifstream fin ("evaluare.in");
ofstream fout ("evaluare.out");

#define MAX 100010

char myString[MAX], *pos = myString;

long termen ();
long factor ();

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

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

	}
	return r;
}

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

int main()
{
    fin.getline(myString, MAX);
    fout <<evaluate() <<'\n';
    return 0;
}