Cod sursa(job #3211970)

Utilizator luc3lexaAlexandrescu Luca luc3lexa Data 10 martie 2024 20:51:42
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <iostream>
#include <bits/stdc++.h>
#include <fstream>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
const int nmax = 100010;
string s;int i,N;
int numar(int &i);
int termen(int &i);
int adunare(int &i);
int product(int &i);

int numar(int &i){
    long int n = 0;
    while( i < N && s[i] >= '0' && s[i] <= '9'){
        n = n*10+(s[i]-'0');
        i++;
    };
    return n;
};
int termen(int &i){
    if(s[i] == '('){
        i++;
        int n = adunare(i);
        i++;
        return n;
       };
       return numar(i);
};
int product(int &i){
    int n = termen(i);
    while(i < N && (s[i] == '*' || s[i] == '/')){
        char operator_ = s[i];
        i++;
        int x = termen(i);
        if(operator_ == '*'){
            n *= x;
        }else{
            n /= x;
        }
    };
    return n;
}
int adunare(int &i){
    int n = product(i);
    while(i < N && (s[i] == '+' || s[i] == '-')){
        char operator_ = s[i];
        i++;
        int x = product(i);
        if(operator_ == '+'){
            n += x;
        }else{
            n -= x;
        }
    };
    return n;
}
int main()
{
    fin >> s;
    i = 0;N = s.length();
    fout << adunare(i);
    return 0;
}