Cod sursa(job #1994944)

Utilizator MaligMamaliga cu smantana Malig Data 26 iunie 2017 17:57:03
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>

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

#define ll long long
#define pb push_back
#define ui unsigned int
const int inf = 1e9 + 5;
const int NMax = 2e6 + 5;
const int lvlMax = 2;
const char lvlOp[2][3] = {"+-","*/"};

int N;
char str[NMax],*p = str;

int eval(int);
int compute(int,int,char);

int main() {
    in>>(str);
    out<<eval(0);

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

int eval(int lvl) {
    int ans = 0;

    if (lvl == lvlMax) {
        if (*p == '(') {
            ++p;
            ans = eval(0);
            ++p;
        }
        else {
            while ('0' <= *p && *p <= '9') {
                ans = ans * 10 + *p++ - '0';
            }
        }
    }
    else {
        for (ans = eval(lvl+1); *p != '\0' && strchr(lvlOp[lvl],*p); ) {
            char op = *p++;
            ans = compute(ans,eval(lvl+1),op);
        }
    }

    return ans;
}


int compute(int x,int y,char op) {
    switch (op) {
    case '+': return x + y;
    case '-': return x - y;
    case '*': return x * y;
    case '/': return x / y;
    }
}