Cod sursa(job #2667252)

Utilizator As932Stanciu Andreea As932 Data 3 noiembrie 2020 10:51:08
Problema Evaluarea unei expresii Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 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(ex[idx] == '+' || ex[idx] == '-'){
        if(ex[idx] == '+'){
            idx++;
            ans += termen();
            break;
        } else if(ex[idx] == '-'){
            idx++;
            ans -= termen();
            break;
        }
    }

    return ans;
}

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

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

    return ans;
}

ll factor(){
    ll ans = 0;

    if(ex[idx] == '('){
        idx++;
        ans = eval();
        idx++;
    } else {
        while(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;
}