Cod sursa(job #2929375)

Utilizator anghelpatrickPatrick Anghel anghelpatrick Data 25 octombrie 2022 18:39:42
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <fstream>

using namespace std;

ifstream cin ("evaluare.in");
ofstream cout ("evaluare.out");

char e[100005];
int i;

int expresie();
int termen();
int factor();
int calculate();

/// a este rezultatul operatiei

int expresie()
{

    int a = termen() ;
    while( e[i]== '+' || e[i]=='-' )
    {
        if ( e[i] == '+' )
        {
            i ++ ;
            a += termen() ;
        }
        if( e[i] == '-' )
        {
            i ++ ;
            a -= termen();
        }
    }
    return a;

}



int termen()
{

    int a = factor() ;
    while( e[i] == '*' || e[i] == '/' )
    {
        if( e[i] == '/' )
        {
            i ++ ;
            a /= factor() ;
        }
        else /// daca e[i] == '*'
        {
            i ++ ;
            a *= factor();
        }

    }
    return a;

}

int factor()
{
    int a;
    if ( e[i] == '(' )
    {
        i ++ ;
        a = expresie() ;
        i ++ ;
    }
    else
        a = calculate() ;

    return a ;
}



int calculate()
{
    int a = 0 ;
    while( e[i] >= '0' && e[i]<='9')
    {
        a = a * 10 + ( e[i] - '0' ) ;
        i ++ ;
    }
    return a;
}


int main()
{
    cin >> e ;
    i = 0 ;
    cout << expresie() ;
}