Cod sursa(job #1797467)

Utilizator Andrei501Clicinschi Andrei Andrei501 Data 4 noiembrie 2016 14:45:32
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <fstream>

using namespace std;

char s[100001];

int expresie();
int termen();
int factor();
int numar();

int poz=0,ANS=0;

int expresie()
{
    int ans=termen();
    while (s[poz]=='+'||s[poz]=='-')
    {
        poz++;
        if (s[poz-1]=='+')
        {
            ans+=termen();
        }
        else
        {
            ans-=termen();
        }
    }
    return ans;
}

int termen()
{
    int ans=factor();
    while (s[poz]=='*'||s[poz]=='/')
    {
        poz++;
        if (s[poz-1]=='*')
        {
            ans*=factor();
        }
        else
        {
            ans/=factor();
        }
    }
    return ans;
}

int factor()
{
    int ans=0;
    if (s[poz]=='(')
    {
        poz++;
        ans=expresie();
        poz++;
    }
    else
    {
        ans=numar();
    }
    return ans;
}

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

int main()
{
    freopen ("eval.in","r",stdin);
    freopen ("eval.out","w",stdout);

    char c;
    int i=0;
    scanf ("%c",&c);
    while (c!='\n')
    {
        i++;
        s[i]=c;
        scanf ("%c",&c);
    }

    s[0]='+';
    ANS=expresie();
    printf ("%d\n",ANS);

    return 0;
}