Cod sursa(job #1354545)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 21 februarie 2015 21:14:36
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include <fstream>
#include <cstring>
#include <cctype>

using namespace std;

int eval();
int termen();
int factor();

char sir[100005];
int pos, n;

int eval() {
    int x = termen();

    while (pos <= n)
        if (sir[pos] == '+') {
            pos++;
            x += termen();
        }
        else if (sir[pos] == '-') {
            pos++;
            x -= termen();
        }
        else
            break;

    return x;
}

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

    while (pos <= n)
        if(sir[pos] == '*') {
            pos++;
            x *= factor();
        }
        else if(sir[pos] == '/'){
            pos++;
            x /= factor();
        }
        else
            break;

    return x;
}

int factor() {
    if (sir[pos] == '(') {
        pos++;

        int x = eval();
        pos++;

        return x;
    }

    int x = 0;
    while (pos <= n && isdigit(sir[pos])) {
        x *= 10;
        x += (sir[pos] - '0');
        pos++;
    }

    return x;
}

int main()
{
    ifstream cin("evaluare.in");
    ofstream cout("evaluare.out");

    cin.get(sir + 1, 100005);
    n = strlen(sir + 1);

    pos = 1;
    cout << eval() << '\n';

    cin.close();
    cout.close();
    return 0;
}