Cod sursa(job #3283024)

Utilizator Robert_NicuNicu Robert Cristian Robert_Nicu Data 7 martie 2025 21:12:50
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <bits/stdc++.h>
using namespace std;

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

string s;

int poz;

int expresie();
int termen();
int factor();
int constanta();

int expresie(){

    int ret = termen();

    while(s[poz] == '+' || s[poz] == '-'){

        if(s[poz] == '+'){

            poz++;

            ret += termen();

        }else if(s[poz] == '-'){

            poz++;

            ret -= termen();

        }

    }

    return ret;

}

int termen(){

    int ret = factor();

    while(s[poz] == '*' || s[poz] == '/'){

        if(s[poz] == '*'){

            poz++;

            ret *= factor();

        }else if(s[poz] == '/'){

            poz++;

            ret /= factor();

        }

    }

    return ret;

}

int factor(){

    int ret;

    if(s[poz] == '('){

        poz++;

        ret = expresie();

        poz++;

    }else if(isdigit(s[poz])){

        ret = constanta();

    }

    return ret;

}

int constanta(){

    int ret = 0;

    while(isdigit(s[poz])){

        ret = ret * 10 + (s[poz] - '0');

        poz++;

    }

    return ret;

}

int main(){

    fin >> s;

    fout << expresie();

}