Cod sursa(job #1639667)

Utilizator RaduToporanRadu Toporan RaduToporan Data 8 martie 2016 13:15:59
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <cstdio>
#include <cstring>

int l,i;
char s[100005];
int eval();
int termen();
int factor();
int nr();

int main()
{
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w",stdout);
    scanf("%s",&s);
    l=strlen(s);
    i=0;
    printf("%d\n",eval());
    return 0;
}

int eval()
{
    int a=termen();
    while (s[i]=='+' or s[i]=='-')
    {
        if (s[i]=='+') i++,a+=termen();
            else i++,a-=termen();
    }
    return a;

}

int termen()
{
    int a=factor();
    while (s[i]=='*' or s[i]=='/')
    {
        if (s[i]=='*') i++,a*=factor();
            else i++,a/=factor();
    }
    return a;
}
int factor()
{
    int r=0;
    if (s[i]=='(')
    {
        i++;
        r=eval();
        i++;
    }
    else r=nr();
    return r;
}

int nr()
{
    int a=0;
    while (s[i]>='0' && s[i]<='9')
    {
        a=a*10+s[i]-'0';
        i++;
    }
    return a;
}