Cod sursa(job #567560)

Utilizator Sm3USmeu Rares Sm3U Data 30 martie 2011 10:25:05
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <stdio.h>
#include <string.h>

using namespace std;

char a[100100];
int n;
int i;

int ord1();
int ord2();
int eval();

int ord1()
{
    int rez=ord2();
    while(a[i]=='+' || a[i]=='-')
    {
        if(a[i]=='+')
        {
            i++;
            rez+=ord2();
        }
        if(a[i]=='-')
        {
            i++;
            rez-=ord2();
        }
    }
    return rez;
}

int ord2()
{
    int rez=eval();
    while(a[i]=='*' || a[i]=='/')
    {
        if(a[i]=='*')
        {
            i++;
            rez*=eval();
        }
        if(a[i]=='/')
        {
            i++;
            rez/=eval();
        }
    }
    return rez;
}

int eval()
{
    int rez=0;
    if(a[i]=='(' )
    {
        i++;
        rez=ord1();
        i++;
    }
    else
    {
        for(;a[i]>='0' && a[i]<='9';rez=rez*10+a[i]-'0',++i);
    }
    return rez;
}

int main()
{
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w",stdout);
    gets(a);
    n=strlen(a);
    printf("%d",ord1());
    return 0;
}