Cod sursa(job #2067993)

Utilizator roberttrutaTruta Robert roberttruta Data 17 noiembrie 2017 00:57:06
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.62 kb
#include <fstream>
#include <cstring>
using namespace std;
int r,i,t,z[100005],q,p=1,x,y;
char c[100005],u[100005],e[200005];
int main()
{
    ifstream f("evaluare.in");
    ofstream g("evaluare.out");

    f>>c;
    for(i=strlen(c)-1;i>=0;i--)
    {
        if(strchr("()+-/*",c[i]))
        {
            if(c[i]=='(')
            {
                while(u[t]!=')')
                {
                    e[++r]=u[t];
                    t--;
                }
                t--;
            }
                else
                {
                    if(c[i]=='+'||c[i]=='-')
                        while(u[t]=='/'||u[t]=='*')
                    {
                        e[++r]=u[t];
                        t--;
                    }
                u[++t]=c[i];
                }
        }
        else
        {
        e[++r]=c[i];
        if(c[i-1]<'0'||c[i-1]>'9')
            e[++r]=' ';
        }
    }
    for(i=t;i>0;i--)
    e[++r]=u[i];
    t=0;i=1;
    while(i<=r)
    {
        if(strchr("+-/*",e[i]))
        {
            x=z[t];t--;
            y=z[t];
            if(e[i]=='+')
                z[t]=x+y;
            if(e[i]=='*')
                z[t]=x*y;
            if(e[i]=='-')
                z[t]=x-y;
            if(e[i]=='/')
                z[t]=x/y;
        }
        else
        {
            while(e[i]>='0'&&e[i]<='9')
            {
                q=q+p*(e[i]-48);
                p=p*10;
                i++;
            }
            p=1;
            z[++t]=q;
            q=0;
        }
        i++;
    }
    g<<z[t];


    return 0;
}