Cod sursa(job #1329025)

Utilizator maribMarilena Bescuca marib Data 28 ianuarie 2015 23:07:29
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>
#include <cstring>
#define DIM 100001
using namespace std;

char s[DIM];

char *p;

int lg;

int termen();

int factor();

int tree();

int termen()
{
    int nr;
    if(*p == '(')
    {
        p++; nr = tree(); p++;
    }
    else
    {
        nr=0;
        while( *p>='0' && *p <= '9')
        {
            nr=nr*10+(*p)-'0';
            ++p;
        }
    }
    return nr;
}

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


int tree()
{
    int rez=factor();
    while(p-s<=lg-1&&(*p == '+' || *p == '-'))
    {
        if(*p == '+')
        {
            ++p;
            rez+=factor();
        }
        else
        {
            ++p;
            rez-=factor();
        }
    }
    return rez;
}


int main()
{
    ifstream in("evaluare.in");
    ofstream out("evaluare.out");
    in.get(s, DIM);
    lg=strlen(s);
    p=s;
    out<<tree()<<"\n";
    in.close();
    out.close();
    return 0;
}