Cod sursa(job #3293956)

Utilizator YosifIosif Andrei Stefan Yosif Data 14 aprilie 2025 11:05:50
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <bits/stdc++.h>
using namespace std;

string fileName = "evaluare";
ifstream fin(fileName + ".in");
ofstream fout(fileName + ".out");

typedef long long ll;
string s;

ll element(int &k);
ll factor(int &k);
ll suma(int &k);

ll suma(int &k) {

    ll ret = factor(k);

    while (k < s.length() && (s[k] == '+' || s[k] == '-')) {

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

            k++;
            ret += factor(k);
        }
        else if (s[k] == '-') {

            k++;
            ret -= factor(k);
        }
    }

    return ret;
}

ll factor(int &k) {

    int ret = element(k);

    while (k < s.length() && (s[k] == '*' || s[k] == '/')) {

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

            k++;
            ret *= element(k);
        }
        else {

            k++;
            ret /= element(k);
        }
    }

    return ret;
}

ll element(int &k) {

    int ret = 0;

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

        k++;
        ret = suma(k);
        k++;
        return ret;
    }

    while (k < s.length() && isdigit(s[k]))
        ret = ret * 10 + (s[k] - '0'), k++;
    return ret;
}

int main() {

    fin >> s;
    int k = 0;
    fout << suma(k);

    return 0;
}