Cod sursa(job #567485)

Utilizator TeodoraTanaseTeodora Tanase TeodoraTanase Data 30 martie 2011 09:10:09
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <cstdio>
#include <cstring>

using namespace std;

const int M=100005;
char a[M];
int sir[M], n, m;

int expresie(int &i)
{
    int val=0, p=m;
    for (; i<n; )
    {
        if (a[i]=='(')
        {
            ++i;
            sir[m++]=expresie(i);
            i++;
        }
        if (a[i]==')')
        {
            for (; m>=p; m--)
            {
                val+=sir[m];
                sir[m]=0;
            }
            return val;
        }
        if (a[i]=='+' || a[i]=='-' || a[i]>='0' && a[i]<='9')
        {
            sscanf (a+i,"%d",&sir[++m]);
            ++i;
            while (a[i]>='0' && a[i]<='9')
                ++i;
        }
        if (a[i]=='*' || a[i]=='/')
        {
            int x=0;
            ++i;
            sscanf(a+i,"%d",&sir[++m]);
            if (a[i-1]=='*')
                sir[m-1]*=sir[m];
            else sir[m-1]/=sir[m];
            while (a[i]>='0' && a[i]<='9')
                i++;
            sir[m]=0; m--;
        }
    }
}

int main()
{
    freopen ("evaluare.in","r",stdin);
    freopen ("evaluare.out","w",stdout);
    fgets(a,M,stdin);
    a[strlen(a)-1]=')';
    n=strlen(a);
    int p=0;
    printf ("%d\n",expresie(p));
    return 0;
}