Cod sursa(job #1973112)

Utilizator santoriniPanea Catalin santorini Data 24 aprilie 2017 14:57:09
Problema Evaluarea unei expresii Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 2.4 kb
#include <fstream>
#include <string.h>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char c,semn[100000],st[10000];
int i,n,k,nr,gasitnr,fp[100000];
long long steval[100];
int main()
{
    while(f>>c)
    {
      if(c>='0'&&c<='9')
      {
        gasitnr=1;
        nr=nr*10+(c-48);
      }
      else
      {
          if(gasitnr)
          {
              n++;
              fp[n]=nr;
              nr=0;
              gasitnr=0;
          }
          if(c=='('||c=='+'||c=='-'||c=='*'||c=='/')
          {
              k++;
              st[k]=c;
              if(st[k]=='+'||st[k]=='-')
              {
                  if(st[k-1]=='+'||st[k-1]=='-'||st[k-1]=='*'||st[k-1]=='/')
                  {
                      n++;
                      semn[n]=st[k-1];
                      st[k-1]=st[k];
                      k--;
                  }
              }
              else
                 if(st[k]=='*'||st[k]=='/')
                 {
                  if(st[k-1]=='*'||st[k-1]=='/')
                  {
                      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]=='+')
        {
            steval[k-1]=steval[k-1]+steval[k];
            k--;
        }
        else
        if(semn[i]=='-')
        {
            steval[k-1]=steval[k-1]-steval[k];
            k--;
        }
        else
        if(semn[i]=='*')
        {
            steval[k-1]=steval[k-1]*steval[k];
            k--;
        }
        else
        if(semn[i]=='/')
        {
            steval[k-1]=steval[k-1]/steval[k];
            k--;
        }
        else
         if(semn[i]!='0')
        {
            k++;
            steval[k]=fp[i];
        }
    }
    g<<steval[1];
    return 0;
}