Cod sursa(job #1098494)

Utilizator obidanDan Ganea obidan Data 4 februarie 2014 20:58:55
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <stdio.h>
#include <string.h>
using namespace std;
char e[100002];
int i=0;
int lg;
bool eNumar()
{
    if((e[i]>='0')&&(e[i]<='9')) return 1;
    return 0;
}
int evalFact();
int evalExp();
int evalTermen();

int evalFact()
{
    int r,nr=0;
    if(e[i]=='(')
    {
        i++;
        r=evalExp();
        i++;
    }
    else if(eNumar())
    {
        while(eNumar())
        {
            nr=nr*10+(e[i]-'0');
            i++;
        }
        r=nr;
    }
    return r;
}
int evalTermen()
{
    int r=evalFact();
    while((i<=lg)&&((e[i]=='*')||(e[i]=='/')))
    {

        if(e[i]=='*')
        {
            i++;
            r=r*evalFact();
        }
        else if(e[i]=='/')
        {
            i++;
            r=r/evalFact();
        }
    }
    return r;
}
int evalExp()
{
  int r=evalTermen();
    while((i<=lg)&&((e[i]=='+')||(e[i]=='-')))
    {
            if(e[i]=='+')
            {
                i++;
                r=r+evalTermen();
            }
            else
            {
                i++;
                r=r-evalTermen();
            }
    }
    return r;
}
int main()
{
    int r;
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w",stdout);
    scanf("%s",e);
    lg=strlen(e);
    printf("%d", evalExp());
    return 0;
}