Cod sursa(job #2098270)

Utilizator skeniaTirla Ovidiu skenia Data 2 ianuarie 2018 16:57:25
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <iostream>
#include <fstream>

using namespace std;

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

char exp[100005];
char *p = exp;

int evaluate();

int factor();

int term();

int main() {
    fin.getline(exp, 100000, '\n');
    fin.close();
    fout << evaluate();
    fout.close();
    return 0;
}

int evaluate() {
    int sol = term();
    while (*p == '+' || *p == '-') {
        switch (*p) {
            case '+':
                ++p;
                sol += term();
                break;
            case '-':
                ++p;
                sol -= term();
                break;
            default:
                break;
        }
    }
    return sol;
}

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

int factor() {
    int tmp = 0;
    if (*p == '(') {
        ++p;
        tmp = evaluate();
        ++p;
    } else {
        while (*p >= '0' && *p <= '9') {
            tmp = tmp * 10 + *p - '0';
            ++p;
        }
    }
    return tmp;
}