Cod sursa(job #1583998)

Utilizator razvandRazvan Dumitru razvand Data 29 ianuarie 2016 16:50:12
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <fstream>

using namespace std;

char s[100001];
int crr = 0;
long long sum = 0;

long eval();
long termen();
long factor();

long eval() {

    long r = termen();

    while(s[crr] == '+' || s[crr] == '-') {

        if(s[crr] == '+') {

            crr++;
            r += termen();

        } else {

            crr++;
            r -= termen();

        }

    }

    return r;

}

long termen() {

    long r = factor();

    while(s[crr] == '*' || s[crr] == '/') {

        if(s[crr] == '*') {

            crr++;
            r *= factor();

        } else {

            crr++;
            r /= factor();

        }

    }

    return r;

}

long factor() {

    long r = 0;

    if(s[crr] == '(') {  // subexpr
        crr++; // (
        r = eval();
        crr++; // )
    } else {  // numar
        while(isdigit(s[crr])) {
            r = r*10 + s[crr] - '0';
            crr++;
       }
    }

    return r;

}

int main() {

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

    in >> s;
    out << eval();

    return 0;
}