Cod sursa(job #1980098)

Utilizator RaduToporanRadu Toporan RaduToporan Data 12 mai 2017 12:13:35
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.52 kb
#include <fstream>
#include <cstring>

using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");

int n,k,l,i,nr,stiva[100005];
char s[100010],fp[200020],st[100010];

int main()
{
    fin.getline(s,100005);
    l=strlen(s);
    n=-1; k=-1;
    for (i=0; i<=l-1; i++)
    {
        if (s[i]>='0' && s[i]<='9')
        {
            fp[++n]=s[i];
            if (s[i+1]<'0' or s[i+1]>'9') fp[++n]=',';
        }
        else if (s[i]=='(')
                    st[++k]=s[i];
        else if (s[i]==')')
        {
            while (st[k]!='(')
                fp[++n]=st[k--];
            k--;
        }
        else if (s[i]=='*' or s[i]=='/')
        {
            char c=s[i];
            while (st[k]=='*' or st[k]=='/')
                fp[++n]=st[k--];
            st[++k]=c;
        }
        else
        {
            char c=s[i];
            while (st[k]=='*' or st[k]=='/' or st[k]=='+' or st[k]=='-')
                fp[++n]=st[k--];
            st[++k]=c;
        }
    }
    while (k>=0)
        fp[++n]=st[k--];
    k=0;
    for (i=0; i<=n; i++)
        if (fp[i]>='0' && fp[i]<='9') nr=nr*10+fp[i]-'0';
            else if (fp[i]==',') { stiva[++k]=nr; nr=0;}
            else if (fp[i]=='+') stiva[--k]=stiva[k]+stiva[k+1];
            else if (fp[i]=='-') stiva[--k]=stiva[k]-stiva[k+1];
            else if (fp[i]=='*') stiva[--k]=stiva[k]*stiva[k+1];
            else if (fp[i]=='/') stiva[--k]=stiva[k]/stiva[k+1];
    fout<<stiva[1]<<"\n";
    return 0;
}