Cod sursa(job #2281339)

Utilizator dey44andIoja Andrei-Iosif dey44and Data 12 noiembrie 2018 07:49:48
Problema Evaluarea unei expresii Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.46 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <cctype>

#define input "evaluare.in"
#define output "evaluare.out"
#define EXP_SIZE 100005

using namespace std;

typedef long long ll;

ifstream in(input);
ofstream out(output);

char expresion[EXP_SIZE];
int expresion_size, curr;

ll Evaluare();
ll Termen();
ll Factor();

ll Evaluare()
{
    ll r = Termen();
    while(expresion[curr] == '+' || expresion[curr] == '-')
    {
        if(expresion[curr] == '+')
        {
            curr++;
            r += Termen();
        }
        else if(expresion[curr] == '-')
        {
            curr++;
            r -= Termen();
        }
    }
    return r;
}

ll Termen()
{
    ll r = Factor();
    while(expresion[curr] == '*' || expresion[curr] == '/')
    {
        if(expresion[curr] == '*')
        {
            curr++;
            r *= Termen();
        }
        else if(expresion[curr] == '/')
        {
            curr++;
            r /= Termen();
        }
    }
    return r;
}

ll Factor()
{
    ll r = 0;
    if(expresion[curr] == '(')
    {
        curr++;
        r = Evaluare();
        curr++;
    }
    else
    {
        while(expresion[curr] >= '0' && expresion[curr] <= '9')
            r = r * 10 + expresion[curr] - '0', curr++;
    }
    return r;
}

int main()
{
    in >> expresion;
    expresion_size = strlen(expresion);
    out << Evaluare();
    return 0;
}