Cod sursa(job #1780487)

Utilizator radu_uniculeu sunt radu radu_unicul Data 16 octombrie 2016 12:02:15
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include<stdio.h>
#include<cstring>
using namespace std;

char sir[100100];
int poz=0;

int getNum()
{
    int nr=0;
    while('0'<=sir[poz]&&sir[poz]<='9')
    {
        nr*=10;
        nr+=sir[poz]-'0';
        poz++;
    }
   // printf("%d ",nr);
    return nr;
}

int Solve()
{
    int p=1,s=0;
    while(sir[poz]!=')')
    {
        if(sir[poz]=='(')
        {
            poz++;
            p*=Solve();
        }
        else if(sir[poz]=='*') poz++;
        else if(sir[poz]=='/')
        {
            poz++;
            if(sir[poz]=='(')
            {
                poz++;
                p/=Solve();
            }
            else p/=getNum();
        }

        else if(sir[poz]<='9'&&sir[poz]>='0') p*=getNum();

        else if(sir[poz]=='+')
        {
            s+=p;
            p=1;
            poz++;
        }
        else if(sir[poz]=='-')
        {
            s+=p;
            p=-1;
            poz++;
        }
    }
    s+=p;
    poz++;
    return s;
}

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

    scanf("%s",sir);
    //printf("%s",sir);
    int n=strlen(sir);
    sir[n]=')';
    printf("%d",Solve());
}