Cod sursa(job #1912527)

Utilizator crysstyanIacob Paul Cristian crysstyan Data 8 martie 2017 09:24:39
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 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 eval();
int factor();
int termen();

int eval()
{
    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
        if (c[pos] == '/')
    {
        pos ++;
        ans /= factor();
    }

    return ans;
}

int factor()
{
    int ans = 0;

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

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

    return ans;
}

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