Cod sursa(job #1090873)

Utilizator Mihai22eMihai Ionut Enache Mihai22e Data 23 ianuarie 2014 10:44:50
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>
#include <cstring>
using namespace std;

const int MAX_L = 100002;

int len, p;
char s[MAX_L];

long long expresie();

long long factor() {
    long long ret = 0;
    if(s[p] == '(') {
        ++p;
        ret = expresie();
        ++p;
    }
    else while(p < len && s[p] >= '0' && s[p] <= '9')
        ret = ret * 10 + s[p] - '0', ++p;
    return ret;
}

long long termen() {
    long long ret = 0;
    ret = factor();
    while(p < len && s[p] == '*' || s[p] == '/') {
        ++p;
        if(s[p - 1] == '*')
            ret *= factor();
        else ret /= factor();
    }
    return ret;
}

long long expresie() {
    long long ret = 0;
    ret = termen();
    while(p < len && s[p] == '+' || s[p] == '-') {
        ++p;
        if(s[p - 1] == '+')
            ret += termen();
        else ret -= termen();
    }
    return ret;
}

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

    f >> s;

    len = strlen(s);

    g << expresie() << "\n";

    f.close();
    g.close();
}