Cod sursa(job #1105408)

Utilizator cristitamasTamas Cristian cristitamas Data 11 februarie 2014 19:45:24
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <cstring>
#include <cstdio>
#define Nmax 100010
#define IsCif(x) (x>='0' && x<='9')
using namespace std;

char S[Nmax];
int i;

int Evaluare();
int Factor();
int Termen();

int Evaluare()
{
    int r=Termen();
    while(S[i]=='+' || S[i]=='-')
    {
        if(S[i]=='+')
        {
            ++i;
            r+=Termen();
        }
        else
        {
            ++i;
            r-=Termen();
        }
    }
    return r;
}

int Termen()
{
    int r=Factor();
    while(S[i]=='*' || S[i]=='/')
    {
        if(S[i]=='*')
        {
            ++i;
            r*=Factor();
        }
        else
        {
            ++i;
            r/=Factor();
        }
    }
    return r;
}

int Factor()
{
    int r=0;
    if(S[i]=='(')
    {
        ++i;
        r=Evaluare();
        ++i;
    }
    else
    {
        for(;IsCif(S[i]);++i)
            r=r*10+S[i]-'0';
    }
    return r;
}



int main()
{
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w",stdout);
    gets(S);
    printf("%d",Evaluare());
    return 0;
}