Cod sursa(job #2870456)

Utilizator justin.stoicaJustin Stoica justin.stoica Data 12 martie 2022 12:54:22
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.37 kb
#include <fstream>

using namespace std;
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
string s;
int last = 0;
long long doOp(char semn, long long a, long long b);
long long solveForFirstRank();
long long solveForSecondRank();
long long findNum();
int main()
{
    cin >> s;
    long long ans;
    ans = solveForFirstRank();
    cout << ans;
    return 0;
}
long long doOp(char semn, long long a, long long b){
    if(semn == '+') a += b;
    if(semn == '-') a -= b;
    if(semn == '*')a *= b;
    if(semn == '/') a/= b;
    return a;
}
long long solveForFirstRank()
{
    long long curr = solveForSecondRank();
    while(last < s.size() && (s[last] == '+' || s[last] == '-')){
        char ch = s[last];
        last++;
        curr = doOp(ch, curr, solveForSecondRank());
    }
    last++;
    return curr;
}
long long solveForSecondRank()
{
    long long curr = findNum();
    while(last < s.size() && (s[last] == '*' || s[last] == '/')){
        char ch = s[last];
        last++;
        curr = doOp(ch, curr, findNum());
    }
    return curr;
}
long long findNum()
{
    long long curr = 0;
    while(last < s.size() && s[last] >= '0' && s[last] <= '9'){
        curr *= 10;
        curr += (s[last++] - '0');
    }
    if(s[last] == '('){
            last++;
            curr = solveForFirstRank();
    }
    return curr;
}