Cod sursa(job #1974731)

Utilizator MaligMamaliga cu smantana Malig Data 28 aprilie 2017 16:25:34
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#include <cstring>

using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");

const int strMax = 1e5 + 5;

char str[strMax], *p;

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

int main() {

    in>>(str+1);
    str[0] = '(';
    str[strlen(str)] = ')';
    p = str;

    out<<eval()<<'\n';

    in.close();out.close();
    return 0;
}

int eval() {
    int ans = termen();
    while (*p == '+' || *p == '-') {
        switch (*p++) {
        case '+': ans += termen(); break;
        case '-': ans -= termen();
        }
    }
    return ans;
}

int termen() {
    int ans = factor();
    while (*p == '*' || *p == '/') {
        switch (*p++) {
        case '*': ans *= factor(); break;
        case '/': ans /= factor();
        }
    }
    return ans;
}

int factor() {
    int ans = 0;
    if (*p == '(') {
        ++p;
        ans = eval();
        ++p;
    }
    else {
        while (strchr("0123456789",*p)) {
            ans = ans * 10 + (*p++ - '0');
        }
    }
    return ans;
}