Cod sursa(job #1780481)

Utilizator ZeBuGgErCasapu Andreas ZeBuGgEr Data 16 octombrie 2016 11:55:11
Problema Evaluarea unei expresii Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include<cstdio>
#include<cstring>

using namespace std;

char s[100010];
int poz;

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

int solve()
{
    int su=0,p=1;
    while(s[poz]!=')')
    {
        if(s[poz]=='(')
        {
            poz++;
            p*=solve();
        }
        else if(s[poz]=='*')
        {
            poz++;
        }
        else if(s[poz]=='/')
        {
            poz++;
            if(s[poz]=='(')
            {
                poz++;
                p*=solve();
            }
            else
            {
                p/=fnum();
            }
        }
        else if(s[poz]>='0'&&s[poz]<='9')
        {
            p*=fnum();
        }
        else if(s[poz]=='+')
        {
            su+=p;
            p=1;
            poz++;
        }
        else
        {
            su+=p;
            p=-1;
            poz++;
        }
    }
    poz++;
    su+=p;
    return su;
}

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

    scanf("%s",s);
    s[strlen(s)]=')';

    printf("%d",solve());
}