Cod sursa(job #1969088)

Utilizator crysstyanIacob Paul Cristian crysstyan Data 18 aprilie 2017 11:34:56
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>
#include <cstring>
#define NMAX 100005

using namespace std;

ifstream f("evaluare.in");
ofstream g("evaluare.out");

char c[NMAX];
int pos = 0;

int evaluare();
int termen();
int factor();

int evaluare()
{
    int ans = termen();

    while (c[pos] == '+' || c[pos] == '-')
        if (c[pos] == '+')
    {
        pos ++;
        ans += termen();
    }
    else
    {
        pos ++;
        ans -= termen();
    }

    return ans;
}

int termen()
{
    int ans = factor();

    while (c[pos] == '*' || c[pos] == '/')
        if (c[pos] == '*')
    {
        pos ++;
        ans *= factor();
    }
    else
    {
        pos ++;
        ans /= factor();
    }

    return ans;
}

int factor()
{
    int ans = 0;

    if (c[pos] == '(')
    {
        pos ++;
        ans = evaluare();
        pos ++;
    }

    while (c[pos] >= '0' && c[pos] <= '9')
    {
        ans = ans * 10 + (c[pos] - '0');
        pos ++;
    }

    return ans;
}

int main()
{
    f.getline(c, NMAX - 2);
    g << evaluare();
    return 0;
}