Cod sursa(job #2152766)

Utilizator obi10Rob Aro obi10 Data 5 martie 2018 19:40:23
Problema Evaluarea unei expresii Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <fstream>

using namespace std;

ifstream f("evaluare.in");
ofstream g("evaluare.out");

char c[100002];
int x[100002],w[100002];

int divi(int p, int q)
{
    int i,mini=23000000,m=p,r,t;

    if(p<q)
    {
    for(i=p;i<=q;i++)
    if(x[i]<mini)
    mini=x[i],m=i;
    r=divi(p,m-1);
    t=divi(m+1,q);

    if(w[m]==-1)
        return r+t;
    if(w[m]==-2)
        return r-t;
    if(w[m]==-3)
        return r*t;
    return r/t;
    }
    return w[p];
}

int main()
{
    char r;
    int i=1,j=1,b=0,maxi=23000000,n,ok;

    while(f>>r)
    {
        c[i]=r;
        i++;
    }
    i--;
    n=i;
    for(i=1;i<=n;i++)
    {
        if(c[i]=='(')
           b=b+10;
        else
        if(c[i]==')')
        b=b-10;
        else
        if(c[i]=='+')
        x[j]=1+b,w[j]=-1,j++;
        else
        if(c[i]=='-')
        x[j]=1+b,w[j]=-2,j++;
        else
        if(c[i]=='*')
        x[j]=5+b,w[j]=-3,j++;
        else
        if(c[i]=='/')
        x[j]=5+b,w[j]=-4,j++;
        else
        {
            ok=1;
            x[j]=maxi;
            w[j]=c[i]-'0';
            i++;
            while(c[i]>='0' && c[i]<='9')
            {
                w[j]=w[j]*10+c[i]-'0';
                i++;
            }
            j++;
            i--;
        }
    }
    g<<divi(1,j-1);
    return 0;
}