Cod sursa(job #567483)

Utilizator Sm3USmeu Rares Sm3U Data 30 martie 2011 09:08:43
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include <stdio.h>
#include <string.h>

using namespace std;

char a[100100];
int b[100100];
int n;
int k;

void citire()
{
    gets(a);
    n=strlen(a);
    a[n]=')';
    n++;
}

int rez(int &i)
{
    int inceput=k;
    for(;i<n;)
    {
        if(a[i]=='(')
        {
            b[k++]=rez(++i);
            i++;
            k++;

        }
        if(a[i]==')')
        {
            int s=0;
            --k;
            for(;inceput<=k;--k)
            {
                s+=b[k];
                b[k]=0;
            }
            return s;
        }
        if(a[i]=='+' || a[i]=='-' || (a[i]>='0' && a[i]<='9'))
        {
            int x;
            sscanf(a+i,"%d",&x);
            ++i;
            for(;a[i]>='0' && a[i]<='9';++i);
            b[k++]=x;
        }
        if(a[i]=='*' || a[i]=='/')
        {
            char c=a[i];
            ++i;
            int x;
            sscanf(a+i,"%d",&x);
            for(;a[i]>='0' && a[i]<='9';++i);
            if(c=='*')
                b[k-1]*=x;
            else
                b[k-1]/=x;

        }
    }
}

int main()
{
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w",stdout);
    citire();
    int i=0;
    printf("%d",rez(i));

    return 0;
}