Cod sursa(job #1993405)

Utilizator Neamtu_StefanStefan Neamtu Neamtu_Stefan Data 22 iunie 2017 21:11:19
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.63 kb
#include <fstream>
#include <cstring>

using namespace std;

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

int n,lungime,i,k,nrel,nr,stiva[100005];
char s[100005],fp[200005],st[100005];

int main()
{
    fin.getline(s,100005);

    lungime=strlen(s);

    n=k=0;

    for (i=0;i<lungime;i++)
        if (s[i]>='0' && s[i]<='9')
        {
            fp[++n]=s[i];
            if (s[i+1]<'0' || 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]=='+' || s[i]=='-')
        {
            char op=s[i];
            while (st[k]=='+' || st[k]=='-' || st[k]=='*' || st[k]=='/')
                fp[++n]=st[k--];
            st[++k]=op;
        }
        else
            if (s[i]=='*' || s[i]=='/')
        {
            char op=s[i];
            while (st[k]=='*' || st[k]=='/')
                fp[++n]=st[k--];
            st[++k]=op;
        }

    while (k)fp[++n]=st[k--];

    for (i=1; i<=n; i++)
        if (fp[i]>='0' && fp[i]<='9') nr=nr*10+fp[i]-'0';
            else if (fp[i]==','){stiva[++nrel]=nr;nr=0;}
                else if (fp[i]=='+') stiva[--nrel]=stiva[nrel]+stiva[nrel+1];
                else if (fp[i]=='-') stiva[--nrel]=stiva[nrel]-stiva[nrel+1];
                else if (fp[i]=='*') stiva[--nrel]=stiva[nrel]*stiva[nrel+1];
                else if (fp[i]=='/') stiva[--nrel]=stiva[nrel]/stiva[nrel+1];

    fout << stiva[1] << "\n";

    return 0;
}