Cod sursa(job #869477)

Utilizator dutzulBodnariuc Dan Alexandru dutzul Data 1 februarie 2013 18:12:36
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <fstream>
using namespace std;
ifstream f ( "evaluare.in" );
ofstream g ( "evaluare.out" );
int i;
#include <string>
string a;
int  n;

int number();
int factor();
int termen();
int eval();


int main()
{
    f >> a;
    n = a.length();
    g<<eval();




    f.close();
    g.close();
    return 0;
}

int number()
{
    int result=0;

    while ( i < n && a[i] >= '0' && a[i] <= '9' )
        result = result * 10 + a[i++] - '0';

    return result;
}

int factor()
{
    if ( a[i] >= '0' && a[i] <= '9' )
        return number();
    else
        {
            ++i;
            return eval();
        }
}

int termen()
{
    int semn=1;
    if (a[i]=='-') semn=-1;
    int result = factor()*semn;

    while ( i < n && ( a[i] == '*' || a[i] == '/' ) )
        if ( a[i++] == '*' )
            result *= factor();
        else
            result /= factor();

    return result;
}

int  eval()
{
    int semn=1;

    if (a[i]=='-') semn=-1;
    int result = termen()*semn;

    while ( i < n && ( a[i] == '+' || a[i] == '-' ) )
        if ( a[i++] == '+' )
            result += termen();
        else
            result -= termen();

    ++i;
    return result;
}