Cod sursa(job #1768902)

Utilizator aaron72Armand Ioan Anusca Popa aaron72 Data 1 octombrie 2016 17:36:10
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
//
//  main.cpp
//  evaluare
//
//  Created by Leonard Anusca on 01/10/2016.
//  Copyright © 2016 Aaron. All rights reserved.
//

#include <bits/stdc++.h>
#define hmax 2

using namespace std;

char s[100010];
char *p=s;
char operand[4][4] = {"+-", "*/", "^", ""};

long operatie(long x, long y, char c);
long eval(long h);
long element();


int main() {
    ifstream fin("evaluare.in");
    fin.getline(s,100010);
    ofstream fout("evaluare.out");
    fout<<eval(0)<<'\n';
    fin.close();
    fout.close();
    return 0;
}

long operatie(long x, long y, char c) {
    switch ( c ) {
        case '+': return x+y;
        case '-': return x-y;
        case '*': return x*y;
        case '/': return x/y;
    }
    return 0;
}

long element() {
    long r=0;
    if ( *p == '(' ) {
        ++p; r = eval(0); ++p;
    } else {
        while ( strchr("0123456789", *p) )
            r = r*10 + *(++p-1) - '0';
    }
    return r;
}

long eval(long h){
    long r = (h==hmax)?element():eval(h+1);
    while ( strchr(operand[h], *p) )
        r = operatie(r, eval(h+1), *(++p-1));
    return r;
}