Cod sursa(job #1639431)

Utilizator george_stelianChichirim George george_stelian Data 8 martie 2016 12:22:30
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <cstdio>
#include <cstring>

using namespace std;

int poz;
char v[100010];

int get_num()
{
    int s=0;
    for(;'0'<=v[poz] && v[poz]<='9';poz++) s=s*10+v[poz]-'0';
    return s;
}

int solve()
{
    int s=0,p=1;
    while(v[poz]!=')')
    {
        if(v[poz]=='+')
        {
            s+=p;
            p=1;
            poz++;
        }
        else if(v[poz]=='-')
        {
            s+=p;
            p=-1;
            poz++;
        }
        else if(v[poz]=='*')
        {
            poz++;
            if(v[poz]=='(') {poz++;p*=solve();}
            else p*=get_num();
        }
        else if(v[poz]=='/')
        {
            poz++;
            if(v[poz]=='(') {poz++;p/=solve();}
            else p/=get_num();
        }
        else if(v[poz]=='(')
        {
            poz++;
            p*=solve();
        }
        else p*=get_num();
    }
    s+=p;
    poz++;
    return s;
}

int main()
{
    freopen("evaluare.in", "r", stdin);
    freopen("evaluare.out", "w", stdout);
    scanf("%s",v);
    int n=strlen(v);
    v[n]=')';
    printf("%d",solve());
    return 0;
}