Cod sursa(job #3302134)

Utilizator SergiuS3003Sergiu Stancu Nicolae SergiuS3003 Data 3 iulie 2025 18:57:50
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.41 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
string s;
int idx = 0;

long long eval();

long long factor()
{
    long long rezultat = 0;
    if (s[idx] == '(')
    {
        idx++; /// sarim peste (
        rezultat = eval();
        idx++; /// sarim peste )
        return rezultat;
    }
    while (idx < s.size() && s[idx] >= '0' && s[idx] <= '9') /// s[idx] - cifra
    {
        rezultat = rezultat * 10 + s[idx] - '0';
        idx++;
    }
    return rezultat;
}

///234-10+21*12
long long termen()
{
    long long rezultat = factor();
    while (idx < s.size() && (s[idx] == '*' || s[idx] == '/'))
    {
        if (s[idx] == '*')
        {
            idx++;
            rezultat *= factor();
        }
        else
        {
            idx++;
            rezultat /= factor();
        }
    }
    return rezultat;
}

long long eval() /// va evalua rezultatul adunarilor si scaderilor
{
    long long rezultat = termen();
    while (idx < s.size() && (s[idx] == '+' || s[idx] == '-'))
    {
        if (s[idx] == '+')
        {
            idx++;
            long long termen2 = termen();
            rezultat += termen2;
        }
        else if (s[idx] == '-')
        {
            idx++;
            long long termen2 = termen();
            rezultat -= termen2;
        }
    }
    return rezultat;
}

int main()
{
    f >> s;
    g << eval();
    return 0;
}