Cod sursa(job #2153039)

Utilizator andrei13Paval Andrei andrei13 Data 5 martie 2018 22:09:28
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.84 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
const int inf=1<<30;
char s[123456];
int n;
int v[123456],w[123456];

int cod(int p,int q)
{
    if(p==q)
        return v[p];
    else
        if(p<q)
    {
        int poz,mn=inf;
        for(int i=p;i<=q;++i)
            if(mn>w[i])
               mn=w[i],poz=i;
        int st=cod(p,poz-1);
        int dr=cod(poz+1,q);
        if(v[poz]==1)
            return st+dr;
        else if(v[poz]==2)
               return st-dr;
               else if(v[poz]==3)
                     return st*dr;
                    else return st/dr;
    }
}

int main()
{
int j=0;
f.getline(s,123456);
n=strlen(s);
int b=0;
int i=0;while(i<n)
{
    if(s[i]=='(')
        b+=20;
    else
        if(s[i]==')')
        b-=20;
        else
            if(s[i]=='+')
                w[j++]=1+b,v[j-1]=1;
                else
                    if(s[i]=='-')
                       w[j++]=2+b,v[j-1]=1;
                       else
                           if(s[i]=='*')
                              w[j++]=10+b,v[j-1]=3;
                              else
                                  if(s[i]=='/')
                                     w[j++]=10+b,v[j-1]=4;
                                         else
                                         {
                                             int p=0;
                                             while(isdigit(s[i]))
                                                p=p*10+s[i]-'0',++i;
                                             --i;
                                             w[j++]=inf;
                                             v[j-1]=p;
                                         }
i++;
}



g<<cod(0,j-1);
    return 0;
}