Cod sursa(job #2529622)

Utilizator Vlad_PipereaPiperea Vlad Vlad_Piperea Data 23 ianuarie 2020 18:25:43
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int NM = 100001;
char s[NM] ;
int p ;

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

int expresie()
{
    int sum = termen() ;
    while ( s[p] == '+' || s[p] == '-' )
    {
        if ( s[p] == '+' )
        {
            p++ ;
            sum += termen () ;
        }
        else
        {
            p++ ;
            sum -= termen() ;
        }
    }
    return sum ;
}

int termen ()
{
    int prod = factor () ;
    while ( s[p] == '*' || s[p] == '/' )
    {
        if ( s[p] == '*' )
        {
            p++ ;
            prod *= factor() ;
        }
        else
        {
            p++ ;
            prod /= factor() ;
        }
    }
    return prod ;
}

int factor()
{
    int val = 0, semn = 1 ;
    while ( s[p] == '-' )
    {
        p++ ;
        semn = -semn ;
    }
    if ( s[p] == '(' )
    {
        p++ ;
        val = expresie() ;
        p++ ;
        return semn * val ;
    }
    while ( s[p] >= '0' && s[p] <= '9' )
    {
        val = val * 10 + (s[p] - '0' ) ;
        p++ ;
    }
    return semn * val ;
}

int main()
{
    in >> s;
    out << expresie() ;
    return 0;
}