Cod sursa(job #1367025)

Utilizator BugirosRobert Bugiros Data 1 martie 2015 15:59:15
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <cstdio>
using namespace std;

const int MAXSIR = 100005;

char sir[MAXSIR];
int poz = 0;

int eval();

int factor()
{
    if (sir[poz] == '(')
    {
        ++poz;
        return eval();
    }
    int rez = 0;
    while ('0' <= sir[poz] && sir[poz] <= '9')
    {
        rez = rez * 10 + (sir[poz] - '0');
        ++poz;
    }
    return rez;
}

int termen()
{
    int rez = factor();
    while (sir[poz] == '*' || sir[poz] == '/')
    {
        ++poz;
        if (sir[poz - 1] == '*')
            rez *= factor();
        if (sir[poz - 1] == '/')
            rez /= factor();
    }
    return rez;
}

int eval()
{
    int rez = termen();
    while (sir[poz] == '+' || sir[poz] == '-')
    {
        ++poz;
        if (sir[poz - 1] == '+')
            rez += termen();
        if (sir[poz - 1] == '-')
            rez -= termen();
    }
    ++poz;
    return rez;
}

void citire()
{
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w",stdout);
    gets(sir);
}

int main()
{
    citire();
    printf("%d\n",eval());
    return 0;
}