Cod sursa(job #1139396)

Utilizator firutibogdanFiruti Bogdan-Cristian firutibogdan Data 11 martie 2014 09:09:53
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.17 kb
#include<fstream>
#include<cstring>
using namespace std;
char st_op[100002],s[100002];
int st_nr[100002],kop,knr,n,nr,i,j,j1,j2,k;
fstream fin,fout;
int main()
{
     ifstream fin("Test2.in");
    ofstream fout("Test2.out");
    st_op[1]='(';
    kop=1;
    knr=0;
    fin.get(s,100001);
    n=strlen(s);
    s[n]=')';
    s[n+1]=0;
    n++;
    for(i=0;i<n;i++)
    {
        if(strchr("+-*/(",s[i])!=0)
        {
            kop++;
            st_op[kop]=s[i];
        }
        else
        if(s[i]>='0' && s[i]<='9')
        {
            nr=s[i]-'0';
            j=i;
            while(s[j+1]>='0' && s[j+1]<='9')
            {
                j=j+1;
                nr=nr*10 +(s[j]-'0');
            }
            if(st_op[kop]=='*')
            {
                st_nr[knr]=st_nr[knr]*nr;
                kop--;
            }
            else
            if(st_op[kop]=='/')
            {
                st_nr[knr]=st_nr[knr]/nr;
                kop--;
            }
            else
            {
                knr++;
                st_nr[knr]=nr;
            }
            i=j;
        }
        else
        {
            j1=kop;
            j2=knr;
            while(st_op[j1]!='(')
                  {
                      j1--;
                      j2--;
                  }
            k=j2+1;
            nr=st_nr[j2];
            for(j=j1+1;j<=kop;j++)
            {
                if(st_op[j]=='+')
                {
                    nr=nr+st_nr[k];
                }
                else
                {
                    nr=nr-st_nr[k];
                }
                k++;
            }
            kop=j1-1;
            knr=j2-1;
            if(st_op[kop]=='*')
            {
                st_nr[knr]=st_nr[knr]*nr;
                kop--;
            }
            else
            if(st_op[kop]=='/')
            {
                st_nr[knr]=st_nr[knr]/nr;
                kop--;
            }
            else
            {
                knr++;
                st_nr[knr]=nr;
            }
        }
    }
    fout<<st_nr[1];
    fin.close();
    fout.close();
    return 0;
}