Cod sursa(job #1098066)

Utilizator pop_bogdanBogdan Pop pop_bogdan Data 4 februarie 2014 13:36:49
Problema Evaluarea unei expresii Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>
#include <string>
using namespace std;

ifstream is("evaluare.in");
ofstream os("evaluare.out");

long Termen();
long Factor();
long Eval();

string s;
int it;

int main()
{
    is >> s;
    os << Eval();
    return 0;
}

long Eval()
{
    long r = Termen();
    while ( s[it] == '+' || s[it] == '-' )
    {
        if ( s[it] == '+' )
        {
            ++it;
            r += Termen();
        }
        else
        {
            ++it;
            r -= Termen();
        }
    }
    return r;
}

long Termen()
{
    long r = Factor();
    while ( s[it] == '*' || s[it] == '/')
    {
        if (s[it] == '*')
        {
            ++it;
            r *= Factor();
            break;
        }
        if ( s[it] == '/')
        {
            ++it;
            r /= Factor();
            break;
        }
    }
    return r;
}

long Factor()
{
    long r = 0;
    if ( s[it] == '(' )
    {
        ++it;
        r = Eval();
        ++it;
    }
    else
    {
        while ( s[it] >= '0' && s[it] <= '9' )
        {
            r = r * 10 + s[it] - '0';
            ++it;
        }
    }
    return r;
}