Cod sursa(job #1557876)

Utilizator ipus1Stefan Enescu ipus1 Data 28 decembrie 2015 13:37:04
Problema Evaluarea unei expresii Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.73 kb
#include<cstdio>
#include<cstring>
using namespace std;
char v[100001];
int c,n;
int eval();
int adun();
int inmult();
int eval()
    {int k=0,rez=0;
    for(c=c+1;c<n&&v[c]!=')';c++)
        {if(v[c]=='(')
            rez=eval();
        else
            if(v[c]>='0'&&v[c]<='9')
                {while(v[c]>='0'&&v[c]<='9')
                    {k=k*10+v[c]-'0';
                    c++;
                    }
                rez=k;
                c--;
                }
            else
                if(v[c]=='+')
                    rez+=adun();
                else
                    if(v[c]=='-')
                        rez-=adun();
                    else
                        if(v[c]=='*')
                            rez*=inmult();
                        else
                            rez/=inmult();
        }
    return rez;
    }
int adun()
    {int k=0;
    if(v[c]>='0'&&v[c]<='9')
        {while(v[c]>='0'&&v[c]<='9')
            {k=k*10+v[c]-'0';
            c++;
            }
        if(c==n||v[c]==')')
            {c--;
            return k;
            }
        else
            if(v[c]=='*')
                return k*inmult();
            else
                if(v[c]=='/')
                    return k/inmult();
        }
    else
        return eval();
    }
int inmult()
    {int k=0;
    c++;
    if(v[c]>='0'&&v[c]<='9')
        {while(v[c]>='0'&&v[c]<='9')
            {k=k*10+v[c]-'0';
            c++;
            }
        c--;
        return k;
        }
    else
        return eval();
    }
int main ()
{freopen ("evaluare.in","r",stdin);
freopen ("evaluare.out","w",stdout);
scanf("%s",&v);
n=strlen(v);
c=-1;
printf("%d",eval());
return 0;
}