Cod sursa(job #3352629)

Utilizator 3fr3mFarcasanu Efrem 3fr3m Data 29 aprilie 2026 18:15:40
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <bits/stdc++.h>
using namespace std;

string s;
int i = 0;

long long expresie();
long long termen();
long long factor();

long long expresie()
{
    long long val = termen();
    while (i < s.size() && (s[i] == '+' || s[i] == '-'))
    {
        char op = s[i++];
        long long val2 = termen();
        if (op == '+') val += val2;
        else val -= val2;
    }
    return val;
}

long long termen()
{
    long long val = factor();
    while (i < s.size() && (s[i] == '*' || s[i] == '/'))
    {
        char op = s[i++];
        long long val2 = factor();
        if (op == '*') val *= val2;
        else val /= val2; // impartire intreaga
    }
    return val;
}

long long factor()
{
    if (s[i] == '(')
    {
        i++; // sar peste '('
        long long val = expresie();
        i++; // sar peste ')'
        return val;
    }
    else
    {
        long long val = 0;
        while (i < s.size() && isdigit(s[i]))
        {
            val = val * 10 + (s[i] - '0');
            i++;
        }
        return val;
    }
}

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

    fin >> s;
    fout << expresie();

    return 0;
}