Cod sursa(job #847353)

Utilizator danalex97Dan H Alexandru danalex97 Data 3 ianuarie 2013 19:23:33
Problema Evaluarea unei expresii Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>
using namespace std;

const int Nmax = 1000010;

char Str[Nmax];
int Act=0;

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

long Eval();
long Fact();
long Term();

long Eval()
{
    long T1=Fact();
    if ( Str[Act] == '+' || Str[Act] == '-' )
    {
        char Sign = Str[Act++];
        long T2 = Fact();
        return T1 + ( Sign == '+' ? 1 : -1 ) * T2;
    }
    else return T1;
}

long Fact()
{
    long T1=Term();
    if ( Str[Act] == '*' || Str[Act] == '/' )
    {
        char Sign = Str[Act++];
        long T2 = Term();
        return Sign == '*' ? T1 * T2 : T1 / T2;
    }
    else
        return T1;
}

long Term()
{
    long Rez=0;
    if ( Str[Act] == '(' )
    {
        ++Act;
        Rez = Eval();
        ++Act;
    }
    else
        for ( ; Str[Act] >= '0' && Str[Act] <= '9' ; ++Act )
            Rez = Rez * 10 + Str[Act] - '0';
    return Rez;
}

int main()
{
    F.getline(Str,Nmax, '\n' );
    G<<Eval()<<'\n';
    return 0;
}