Cod sursa(job #2481143)

Utilizator rares22iunieDoroftei Rares rares22iunie Data 26 octombrie 2019 15:04:06
Problema Evaluarea unei expresii Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.84 kb
#include <iostream>
#include <cstdio>
#include <string.h>
using namespace std;
long long b[100002],c[100002],i,x,n,y,x1;
char a[100002];
int main()
{
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w",stdout);
    scanf("%s",&a);
    n=strlen(a);
    for(i=0;i<=n-1;i++)
    {
        if(a[i]>='0' && a[i]<='9')
        {
            x1=0;
            while(a[i]>='0' && a[i]<='9')
            {
                x1=x1*10+a[i]-48;;
                i++;
            }
            i--;
            x++;
            b[x]=x1;
        }
        else
        {
            if(a[i]=='(')
            {
                y++;
                c[y]=-1;
            }
            else
            if(a[i]==')')
            {
                while(y!=0 && c[y]!=-1)
                {
                    x++;
                    b[x]=c[y];
                    y--;
                }
                if(c[y]==-1)
                y--;
            }
            else
            if(a[i]=='*')
            {
                if(c[y]==-3 || c[y]==-4)
                {
                    x++;
                    b[x]=c[y];
                    y--;
                }
                y++;
                c[y]=-3;
            }
            else
            if(a[i]=='/')
            {
                if(c[y]==-3 || c[y]==-4)
                {
                    x++;
                    b[x]=c[y];
                    y--;
                }
                y++;
                c[y]=-4;
            }
            else
            if(a[i]=='+')
            {
                if(c[y]!=-1 && y!=0)
                {
                    x++;
                    b[x]=c[y];
                    y--;
                }
                y++;
                c[y]=-5;
            }
            else
            if(a[i]=='-')
            {
                if(c[y]!=-1 && y!=0)
                {
                    x++;
                    b[x]=c[y];
                    y--;
                }
                y++;
                c[y]=-6;
            }

        }
    }
    while(y!=0)
    {
        x++;
        b[x]=c[y];
        y--;
    }
    for(i=1;i<=x;i++)
    {
    	//printf("%d ",b[i]);
        if(b[i]>=0)
        {
        y++;
        c[y]=b[i];
        }
        else
        {
            if(b[i]==-3)
            {
                y--;
                c[y]=c[y]*c[y+1];
            }
            if(b[i]==-4)
            {
                y--;
                c[y]=c[y]/c[y+1];
            }
            if(b[i]==-5)
            {
                y--;
                c[y]=c[y]+c[y+1];
            }
            if(b[i]==-6)
            {
                y--;
                c[y]=c[y]-c[y+1];
            }
        }
    }
    printf("%d",c[y]);
    return 0;
}