Cod sursa(job #1497719)

Utilizator DobosDobos Paul Dobos Data 7 octombrie 2015 10:53:06
Problema Evaluarea unei expresii Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMax = 1e5 + 5;

char C[NMax], *p = C;

int Eval();
int Termen();
int Factor();

int Eval(){
    int k;
    int res = Termen();
    while(*p == '+' || *p == '-'){
        if(*p == '+'){
            p++;
            k = Termen();
            res += k;
        }
        if(*p == '-'){
            p++;
            k = Termen();
            res -= k;
        }
    }
    return res;
}

int Termen(){
    int k;
    int res = Factor();
    while(*p == '*' || *p == '/'){
        if(*p == '*'){
            p++;
            k = Termen();
            res *= k;
        }
        if(*p == '/'){
            p++;
            k = Termen();
            res /= k;
        }
    }
    return res;
}

int Factor(){
    int res = 0;
    if(*p == '('){
        p++;
        res = Eval();
        p++;
    } else {
        while(isdigit(*p)){
            res = res * 10 + (*p - '0');
            p++;
        }
    }
    return res;
}

int main(){
    fin >> C;
    fout << Eval();
    return 0;
}