Cod sursa(job #1794963)

Utilizator FlowstaticBejan Irina Flowstatic Data 1 noiembrie 2016 21:06:47
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
#define NMAX 100005

using namespace std;

char s[NMAX];
int poz,N;

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

int Expr(int &poz);
int Termen(int &poz);
int Factor(int &poz);

int main()
{
    fin>>s;
    poz = 0;
    fout<<Expr(poz)<<'\n';
    return 0;
}

int Expr(int &poz)
{
    int r = Termen(poz);
    while(s[poz] == '+' || s[poz] == '-')
    {
        if(s[poz] == '+')
            r+=Termen(++poz);
        else
            r-=Termen(++poz);
    }
    return r;
}

int Termen(int &poz)
{
    int r = Factor(poz);
    while(s[poz] == '*' ||s[poz] == '/')
    {
        if(s[poz] == '*')
            r*=Factor(++poz);
        else
            r/=Factor(++poz);
    }
    return r;
}

int Factor(int &poz)
{
    int val;
    if(s[poz] == '(')
    {
        val = Expr(++poz);
        ++poz;
    }
    else
    {
        val = 0;
        while(s[poz] >='0' && s[poz]<='9')
            val = val*10+s[poz++]-'0';
    }
    return val;
}