Cod sursa(job #1899248)

Utilizator ImbuzanRaduImbuzan Radu ImbuzanRadu Data 2 martie 2017 16:48:29
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("evaluare.in");
ofstream g("evaluare.out");

char expr[100005];
long poz;

long factor();
long gr2();
long paranteze();

int main()
{
    f.getline(expr,1000005);
    g<<factor();
    return 0;
}

long factor()
{long r=gr2();
while(expr[poz]=='+' || expr[poz]=='-')
    {
        if(expr[poz]=='+')
            {++poz;
            r+=gr2();}
        else if(expr[poz]=='-'){++poz;r-=gr2();}
    }
    return r;
}

long gr2()
{
long r=paranteze();
while(expr[poz]=='*' ||expr[poz]=='/')
    {
        if(expr[poz]=='*') {++poz;r*=paranteze();}
        else if(expr[poz]=='/')
            {++poz;
            r/=paranteze();
            }
    }
    return r;
}


long paranteze()
{ long r=0;
    if ( expr[poz] == '(' ) {
        ++poz;
        r = factor();
        ++poz;
    } else {
        while (isdigit(expr[poz]) )  {
            r = r*10 + (expr[poz] - '0');
            ++poz;
        }
    }
    return r;
}