Cod sursa(job #2667248)

Utilizator As932Stanciu Andreea As932 Data 3 noiembrie 2020 10:47:11
Problema Evaluarea unei expresii Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.4 kb
#include <bits/stdc++.h>

using namespace std;

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

typedef long long ll;

string ex;
int idx, len;

ll eval();
ll termen();
ll factor();

ll eval(){
    ll ans = termen();

    while(idx < len && (ex[idx] == '+' || ex[idx] == '-')){
        if(ex[idx] == '+'){
            idx++;
            ans += termen();
            break;
        } else {
            idx++;
            ans -= termen();
            break;
        }
    }

    return ans;
}

ll termen(){
    ll ans = factor();

    while(idx < len && (ex[idx] == '*' || ex[idx] == '/')){
        if(ex[idx] == '*'){
            idx++;
            ans *= factor();
            break;
        } else {
            idx++;
            ans /= factor();
            break;
        }
    }

    return ans;
}

ll factor(){
    ll ans = 0;

    while(idx < len && (ex[idx] == '(' || (ex[idx] >= '0' && ex[idx] <= '9'))){
        if(ex[idx] == '('){
            idx++;
            ans += eval();
            idx++;
        } else if(ex[idx] >= '0' && ex[idx] <= '9'){
            while(idx < len && ex[idx] >= '0' && ex[idx] <= '9'){
                ans = ans * 10 + (ex[idx] - '0');
                idx++;
            }
        }
    }

    return ans;
}

int main()
{
    fin >> ex;
    len = ex.length();
    fout << eval();

    return 0;
}