Cod sursa(job #2368813)

Utilizator Mihai145Oprea Mihai Adrian Mihai145 Data 5 martie 2019 18:24:03
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>
#include <string>

using namespace std;

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

string s;

int PlusMinus(int &pos);
int MultiplyDivide(int &pos);
int BracketsValues(int &pos);

int PlusMinus(int &pos)
{
    int ans = MultiplyDivide(pos);

    while(s[pos] == '+' || s[pos] == '-')
    {
        pos++;

        if(s[pos - 1] == '+')
            ans += MultiplyDivide(pos);
        else
            ans -= MultiplyDivide(pos);
    }

    return ans;
}

int MultiplyDivide(int &pos)
{
    int ans = BracketsValues(pos);

    while(s[pos] == '*' || s[pos] == '/')
    {
        pos++;

        if(s[pos - 1] == '*')
            ans *= BracketsValues(pos);
        else
            ans /= BracketsValues(pos);
    }

    return ans;
}

int BracketsValues(int &pos)
{
    int ans = 0;

    if(s[pos] == '(')
    {
        pos++;
        ans = PlusMinus(pos);
        pos++;
    }
    else
    {
        while(isdigit(s[pos]))
            ans = ans * 10 + (s[pos] - '0'), pos++;
    }

    return ans;
}

int main()
{
    int p = 0;

    fin >> s;

    fout << PlusMinus(p) << '\n';

    return 0;
}