Cod sursa(job #2292488)

Utilizator Mihai145Oprea Mihai Adrian Mihai145 Data 29 noiembrie 2018 17:10:35
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.39 kb
#include <fstream>
#include <string>

using namespace std;

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

string s;
int PlusMinus(int &p);
int MultiplyDivide(int &p);
int BracketsConstant(int &p);
int ValueOf(int &p);

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

    while(p < s.size() && (s[p] == '+' || s[p] == '-'))
    {
        int sign = (s[p] == '+') ? 1 : -1;
        p++;

        ans += sign * MultiplyDivide(p);
    }

    return ans;
}

int MultiplyDivide(int &p)
{
    int ans = BracketsConstant(p);

    while(p < s.size() && (s[p] == '*' || s[p] == '/'))
    {
        char sign = s[p];
        p++;

        if(sign == '*')
            ans = ans * BracketsConstant(p);
        else
            ans = ans / BracketsConstant(p);
    }

    return ans;
}

int BracketsConstant(int &p)
{
    int ans;

    if(s[p] == '(')
    {
        p++;
        ans = PlusMinus(p);
        p++; /// ')'
    }
    else
        ans = ValueOf(p);

    return ans;
}

int ValueOf(int &p)
{
    int sign = 1;
    if(s[p] == '-')
    {
        sign = -1;
        p++;
    }

    int ans = 0;
    while(p < s.size() && isdigit(s[p]))
    {
        ans = ans * 10 + s[p] - '0';
        p++;
    }

    return sign * ans;
}

int main()
{
    int p = 0;
    fin >> s;

    fout << PlusMinus(p);

    return 0;
}