Cod sursa(job #1091983)

Utilizator kiralalaChitoraga Dumitru kiralala Data 26 ianuarie 2014 14:07:04
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <fstream>
#include <cstring>
#define NMAX 100005

using namespace std;
//recursivitate indirecta
FILE* f=freopen("evaluare.in","r",stdin);
FILE* o=freopen("evaluare.out","w",stdout);

char exp[NMAX];
int ind,l;

char adsign[]="-+",prsign[]="/*";

int Expresie();
int Factor()
{
    int r=0;
    if(exp[ind]=='(') {
       ind+=1;
       r=Expresie();
       ind+=1;
    }
    else
    {
        while(exp[ind]>='0'&&exp[ind]<='9')
        {
            r=r*10+(exp[ind]-'0');
            ind+=1;
        }
    }
    return r;
}

int Termen()
{
    int r=Factor();
    while(ind<l&&strchr(prsign,exp[ind]))
    {
        if(exp[ind]=='*'){
            ind+=1;
            r*=Factor();
        }
        else {
            ind+=1;
            r/=Factor();
        }
    }
    return r;
}

int Expresie()
{
    int r=Termen();
    while(ind<l&&strchr(adsign,exp[ind]))
    {
        if(exp[ind]=='+') {
            ind+=1;
            r+=Termen();
        }
        else {
            ind+=1;
            r-=Termen();
        }
    }
    return r;
}

int main()
{
    scanf("%s",exp);
    l=strlen(exp);
    int r=Expresie();
    printf("%d",r);

    return 0;
}