Cod sursa(job #3245841)

Utilizator prares06Papacioc Rares-Ioan prares06 Data 30 septembrie 2024 20:37:53
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include<bits/stdc++.h>
using namespace std;

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

int factor();
int termen();
string expresie;
int ptr;

int evaluare(){
    int R = termen();
    while (expresie[ptr] == '-' or expresie[ptr] == '+'){
        if(expresie[ptr] == '-'){
            ++ptr;
            R -= termen();
        }
        else{
            if(expresie[ptr] == '+'){
                ++ptr;
                R += termen();
            }
        }
    }
    return R;
}

int termen(){
    int R = factor();
    while (expresie[ptr] == '*' or expresie[ptr] == '/'){
        if(expresie[ptr] == '*'){
            ++ptr;
            R *= factor();
        }
        else{
            if(expresie[ptr] == '/'){
                ++ptr;
                R /= factor();
            }
        }
    }
    return R;
}

int factor(){
    int64_t R = 0;
    if(expresie[ptr] == '('){
        ++ptr;
        R = evaluare();
        ++ptr;
    }
    else{
        while(isdigit(expresie[ptr])){
            R = R * 10 + (expresie[ptr] - '0');
            ++ptr;
        }
    }
    return R;
}

int main(){
    fin >> expresie;
    expresie += '$';
    fout << evaluare();
}