Cod sursa(job #1826573)

Utilizator alin1999Buzatu Alin alin1999 Data 10 decembrie 2016 17:10:51
Problema Evaluarea unei expresii Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 3.88 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
int numere[100005],i,nr,stiva[100005],k,j,p,imd,ims,ms,md;
char op[100005],sir[100005];
int main()
{
    fin.getline(sir,100005);
    for(i=0;i<strlen(sir);i++)
        if(isdigit(sir[i]))
    {
        nr+=sir[i]-'0';
        nr*=10;
        op[i]=' ';
        p++;
    }
    else
    {
        nr/=10;
        stiva[i-p]=nr;
        nr=p=0;
        op[i]=sir[i];
    }
    nr/=10;
    stiva[strlen(sir)]=nr;

    for(i=0;i<=strlen(sir);i++)
        {
            if(op[i]=='(')
        {j=i+1;op[i]=' ';
            while(op[j]!=')')
    {
        if(op[j]=='*')
        {
            for(int k=j-1;k>=0;k--)
                if(stiva[k]!=0)
            {ms=stiva[k];ims=k;break;}
            for(int k=j+1;k<=strlen(sir);k++)
                if(stiva[k]!=0)
            {
                md=stiva[k];imd=k;break;
            }
            stiva[ims]=ms*md;
            stiva[imd]=0;
            op[j]=' ';
        }
        if(op[j]=='/')
        {
            for(int k=j-1;k>=0;k--)
                if(stiva[k]!=0)
            {ms=stiva[k];ims=k;break;}
            for(int k=j+1;k<=strlen(sir);k++)
                if(stiva[k]!=0)
            {
                md=stiva[k];imd=k;break;
            }
            stiva[ims]=ms/md;
            stiva[imd]=0;
            op[j]=' ';
        }
        if(op[j]=='+')
        {
            for(int k=j-1;k>=0;k--)
                if(stiva[k]!=0)
            {ms=stiva[k];ims=k;break;}
            for(int k=j+1;k<=strlen(sir);k++)
                if(stiva[k]!=0)
            {
                md=stiva[k];imd=k;break;
            }
            stiva[ims]=ms+md;
            stiva[imd]=0;
            op[j]=' ';
        }
        if(op[j]=='-')
        {
            for(int k=j-1;k>=0;k--)
                if(stiva[k]!=0)
            {ms=stiva[k];ims=k;break;}
            for(int k=j+1;k<=strlen(sir);k++)
                if(stiva[k]!=0)
            {
                md=stiva[k];imd=k;break;
            }
            stiva[ims]=ms-md;
            stiva[imd]=0;
            op[j]=' ';
        }
        j++;
    }
op[j]=' ';
        }
    if(op[i]=='*')
        {
            for(int k=i-1;k>=0;k--)
                if(stiva[k]!=0)
            {ms=stiva[k];ims=k;break;}
            for(int k=i+1;k<=strlen(sir);k++)
                if(stiva[k]!=0)
            {
                md=stiva[k];imd=k;break;
            }
            stiva[ims]=ms*md;
            stiva[imd]=0;
            op[i]=' ';
}
if(op[i]=='/')
        {
            for(int k=i-1;k>=0;k--)
                if(stiva[k]!=0)
            {ms=stiva[k];ims=k;break;}
            for(int k=i+1;k<=strlen(sir);k++)
                if(stiva[k]!=0)
            {
                md=stiva[k];imd=k;break;
            }
            stiva[ims]=ms/md;
            stiva[imd]=0;
            op[i]=' ';
        }
}
for(i=0;i<=strlen(sir);i++)
 {if(op[i]=='+')
        {
            for(int k=i-1;k>=0;k--)
                if(stiva[k]!=0)
            {ms=stiva[k];ims=k;break;}
            for(int k=i+1;k<=strlen(sir);k++)
                if(stiva[k]!=0)
            {
                md=stiva[k];imd=k;break;
            }
            stiva[ims]=ms+md;
            stiva[imd]=0;
            op[i]=' ';
        }
        if(op[i]=='-')
        {
            for(int k=i-1;k>=0;k--)
                if(stiva[k]!=0)
            {ms=stiva[k];ims=k;break;}
            for(int k=i+1;k<=strlen(sir);k++)
                if(stiva[k]!=0)
            {
                md=stiva[k];imd=k;break;
            }
            stiva[ims]=ms-md;
            stiva[imd]=0;
            op[i]=' ';
        }
 }
for(i=0;i<=strlen(sir);i++)
    if(stiva[i]!=0)
{fout<<stiva[i];return 0;}
        return 0;
}