Cod sursa(job #2338117)

Utilizator alexoloieriAlexandru Oloieri alexoloieri Data 7 februarie 2019 01:25:14
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <fstream>
#define LMAX 100005

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

char *p;
char s[LMAX];

int parseFactor();
int parseProdDiv();
int parseSumSub();

int main()
{
    fin.getline(s, LMAX);
    p = s;
    fout<<parseSumSub()<<'\n';
    fin.close();
    fout.close();
    return 0;
}

int parseFactor()
{
    if (*p == '(')
    {
        ++p;
        int ans = parseSumSub();
        ++p;
        return ans;
    }
    int ans = 0;
    while (*p>='0' && *p<='9')
    {
        ans = ans * 10 + (*p - '0');
        ++p;
    }
    return ans;
}

int parseProdDiv()
{
    int m1 = parseFactor();
    while (*p == '*' || *p == '/')
    {
        int type = (*p == '*' ? 1 : 2);
        ++p;
        int m2 = parseFactor();
        if (type == 1)
        {
            m1 = m1 * m2;
        }
        else
        {
            m1 = m1 / m2;
        }
    }
    return m1;
}

int parseSumSub()
{
    int m1 = parseProdDiv();
    while (*p == '+' || *p == '-')
    {
        int type = (*p == '+' ? 1 : 2);
        ++p;
        int m2 = parseProdDiv();
        if (type == 1)
        {
            m1 = m1 + m2;
        }
        else
        {
            m1 = m1 - m2;
        }
    }
    return m1;
}