Cod sursa(job #2479194)

Utilizator emadinuDinu Ema emadinu Data 23 octombrie 2019 15:18:18
Problema Evaluarea unei expresii Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.94 kb
#include <fstream>

using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
char c,semn[100000],st[100000];
int i,n,k,nr,gasitnr,fp[100000];
long long stiva[100];
int main()
{

   while(in>>c)
   {
       if(c>='0'&&c<='9')
       {
           gasitnr=1;
           nr=nr*10+(c-48);
       }
       else if(gasitnr==1){
        n++;
        fp[n]=nr;
        nr=0;
        gasitnr=0;
       }
       if(c=='('||c=='+'||c=='-'||c=='/'||c=='*')
       {
           k++;
           st[k]=c;
           if(st[k]=='+'||st[k]=='-')
           {
               while(st[k]=='+'||st[k]=='-'||st[k]=='*'||st[k]=='/')
               {
                   n++;
                   semn[n]=st[k-1];
                   st[k-1]=st[k];
                   k--;
               }
           }
           else if(st[k]=='*'||st[k]=='/')
           {
               while(st[k]=='*'||st[k]=='/')
               {
                   n++;
                   semn[n]=st[k-1];
                   st[k-1]=st[k];
                   k--;
               }
           }


       }
       else if(c==')')
       {
           while(st[k]!='(')
           {
              n++;
              semn[n]=st[k];
              k--;
           }
           k--;
       }

   }
   if(gasitnr)
   {
       n++;
       fp[n]=nr;
       nr=0;
       gasitnr=0;
   }
   while(k)
   {
       n++;
       semn[n]=st[k];
       k--;
   }
   k=0;
   for(i=1;i<=n;i++)
   {
       if(semn[i]!='*'||semn[i]!='+'||semn[i]!='-'||semn[i]!='/')
       {
           k++;
           stiva[k]=fp[i];
       }
       else
       {
           if(semn[i]=='+')stiva[k-1]=stiva[k-1]+stiva[k];
           if(semn[i]=='-')stiva[k-1]=stiva[k-1]-stiva[k];
           if(semn[i]=='*')stiva[k-1]=stiva[k-1]*stiva[k];
           if(semn[i]=='/')stiva[k-1]=stiva[k-1]/stiva[k];
           k--;
       }
   }
   out<<stiva[1];
    return 0;
}