Cod sursa(job #2328403)

Utilizator aurelionutAurel Popa aurelionut Data 25 ianuarie 2019 18:28:46
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <iostream>

#include <fstream>
#include <cstring>

using namespace std;

const int NMAX = 100005;
char s[NMAX];
int n, p;
int expresie(), termen(), factor();
/**
E : T + T sau T - T sau T
T : F * F sau F / F sau F
E : (E) sau un numar
*/

int expresie()
{
    int x = termen();
    while (s[p] == '+' || s[p] == '-')
    {
        ++p;
        if (s[p - 1] == '+')
            x += termen();
        else
            x -= termen();
    }
    return x;
}

int termen()
{
    int x = factor();
    while (s[p] == '*' || s[p] == '/')
    {
        ++p;
        if (s[p - 1] == '*')
            x *= factor();
        else
            x /= factor();
    }
    return x;
}

int factor()
{
    int x = 0;
    if (s[p] == '(')
    {
        ++p;
        x = expresie();
        ++p;
    }
    else
    {
        while (p <= n && ('0' <= s[p] && s[p] <= '9'))
        {
            x = x * 10 + (s[p] - '0');
            ++p;
        }
    }
    return x;
}

int main()
{
    ifstream fin("evaluare.in");
    ofstream fout("evaluare.out");
    fin >> (s + 1);
    n = strlen(s + 1);
    p = 1;
    fout << expresie() << "\n";
    fin.close();
    fout.close();
    return 0;
}