Cod sursa(job #2153118)

Utilizator dragosh122Alexiuc Dragos dragosh122 Data 5 martie 2018 22:54:00
Problema Evaluarea unei expresii Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.75 kb
#include <fstream>
#define inf 1000000100
using namespace std;

ifstream f("evaluare.in");
ofstream g("evaluare.out");
int q;
char c[100001];
long long nr[100001],oper[100001],qper[100001];

long long DI(int p,int q)
{
    if(p<q)
    {
        int mini=inf,poz=p;
        for(int i=p;i<=q;i++)
            if(oper[i]<mini)
                mini=oper[i],poz=i;
        int a1=DI(p,poz-1);
        int a2=DI(poz+1,q);
        if(qper[poz]==1)
            return a1+a2;
            else
                if(qper[poz]==2)
                    return a1-a2;
                else
                    if(qper[poz]==3)
                        return a1*a2;
            return a1/a2;

    }
    else
        if(p==q)
    {
        return nr[p];
    }
}
int main()
{
    f.get(c,100001);
    int x;
    int b=0;
    for(int i=0;c[i];i++)
    {
        if(isdigit(c[i]))
        {
            x=0;
            while(isdigit(c[i]))
                x=x*10+(c[i]-'0'),i++;
            i--;
            nr[++q]=x;
            oper[q]=inf;
            qper[q]=inf;
        }
        else
        {
            if(c[i]=='(')
                b+=20;
            else
                if(c[i]==')')
                    b-=20;
                else
                    if(c[i]=='+')
                        nr[++q]=inf,oper[q]=b+1,qper[q]=1;
                else
                    if(c[i]=='-')
                        nr[++q]=inf,oper[q]=b+1,qper[q]=2;
                else
                    if(c[i]=='*')
                        nr[++q]=inf,oper[q]=b+10,qper[q]=3;
                else
                    if(c[i]=='/')
                        nr[++q]=inf,oper[q]=b+10,qper[q]=4;
            }
    }
    g<<DI(1,q);
    return 0;
}