Cod sursa(job #3032926)

Utilizator Paul281881818818181991919191881818Draghici Paul Paul281881818818181991919191881818 Data 23 martie 2023 09:23:05
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>
#include <cstring>
#define nMAX 100002
std::ifstream fin("evaluare.in");
std::ofstream fout("evaluare.out");
char s[nMAX], *p = s;
int termen();
int factor();

int evaluate(){
    int res = termen();
    while(*p == '+' || *p == '-'){
        switch(*p){
        case '+':
            ++p;
            res += termen();
            break;
        case '-':
            ++p;
            res -= termen();
            break;
        }
    }
    return res;
}
int termen(){
    int res = factor();
    while(*p == '*' || *p == '/'){
        switch(*p){
        case '*':
            ++p;
            res *= factor();
            break;
        case '/':
            ++p;
            res /= factor();
            break;
        }
    }
    return res;
}

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