Cod sursa(job #1374235)

Utilizator popescu.octavianPopescu Octavian popescu.octavian Data 5 martie 2015 00:36:39
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <cstdio>
#include <cstring>

using namespace std;

int n, i, j;
char s[100002];

int eval();
int EvaluareExpresie();
int EvaluareFactor();
int EvaluareTermen();

int main()
{
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w",stdout);
    fgets(s,100001,stdin);
    n=strlen(s);
    printf("%d\n",EvaluareExpresie());
    return 0;
}
int eval()
{
    int f=0;
    j=i;
    while(s[j]>='0'&&s[j]<='9')
        {
            f=f*10+s[j]-'0';
            j++;
        }
    return f;
}
int EvaluareFactor()
{
    int f=0;
    if(s[i]=='(')
    {
        i++;
        f=EvaluareExpresie();
        i++;
    }
    else
    {
        f=eval();
        i=j;
    }
    return f;
}
int EvaluareTermen()
{
    int f=EvaluareFactor();
    while(i<n&&(s[i]=='*'||s[i]=='/'))
    {
        if(s[i]=='*') { i++; f*=EvaluareFactor();}
            else { i++; f/=EvaluareFactor();}
    }
    return f;
}
int EvaluareExpresie()
{
    int t=EvaluareTermen();
    while(i<n&&(s[i]=='+'||s[i]=='-'))
    {
        if(s[i]=='+') { i++; t+=EvaluareTermen();}
            else { i++; t-=EvaluareTermen();}
    }
    return t;
}