Cod sursa(job #1974415)

Utilizator MaligMamaliga cu smantana Malig Data 27 aprilie 2017 16:40:58
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.51 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <stack>

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

#define ll long long
const int strMax = 1e5 + 5;
const int maxLvl = 2;

int N;
char str[strMax], *p = str;
const char lvlOp[3][3] = {'+','-','\0','*','/','\0'};

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

int main() {
    in>>str;
    str[strlen(str)] = 'd';
    /*
    const char s[4] = "012";
    cout<<s[2]<<'\n';
    cout<<s+1<<'\n';
    //s[1] = 'c';

    char *ptr = (char*)s;
    ptr[1] = 'c';

    cout<<s<<'\n';
    //*/

    cout<<lvlOp[0]<<'\n';
    cout<<lvlOp[1]<<'\n';

    char test = '-';
    if (strchr(lvlOp[1],test) == nullptr)
        cout<<"da"<<'\n';

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

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

int eval(int lvl) {
    int ans;

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

    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;
    }
}