Cod sursa(job #2327426)

Utilizator miha5092mihai mitrea miha5092 Data 24 ianuarie 2019 18:10:59
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <fstream>

using namespace std;

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

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

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

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

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

int factor()
{
    int semn = 1 , val = 0 ;
    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;
}