Cod sursa(job #3302695)

Utilizator Belea_DariusBelea Mihai Darius Belea_Darius Data 10 iulie 2025 10:52:49
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.5 kb
#include <iostream>
#include <fstream>

using namespace std;

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

long long v[100001], ind, n;

long long opg1();

long long element(){

    long long numar;

    numar = 0;
    if(v[ind] == '('){
        ind ++;
        numar = opg1();
        ind ++;
    }
    while(ind <= n && v[ind] >= '0' && v[ind] <= '9'){
        numar = numar * 10 + v[ind] - '0';
        ind ++;
    }

    return numar;
}
long long opg2(){//operatie garul 2(*, /)
    long long prod;
    prod = element();

    while(ind <= n && (v[ind] == '*' || v[ind] == '/')){
        if(v[ind] == '*'){
            ind ++;
            prod *= element();
        }
        else{
            ind ++;
            prod /= element();
        }
//        cout << "ind = " << ind << " prod = " << prod << endl;
    }
    return prod;
}
long long opg1(){ //-operatie gradul 1(+, -)
    long long suma;
    suma = opg2();

    while(ind <= n && (v[ind] == '+' || v[ind] == '-')){
        if(v[ind] == '+'){
            ind ++;
            suma += opg2();
        }
        else{
            ind ++;
            suma -= opg2();
        }
//        cout << "ind = " << ind << " suma = " << suma << endl;
    }
    return suma;
}

int main()
{
    long long i;
    char c;
    fin.get(c);
    ind = 1;
    while(c != '\n'){
        v[ind ++] = c;
        fin.get(c);
    }
    n = ind;
    ind = 1;
    fout << opg1() << endl;
    return 0;
}