Cod sursa(job #1993403)

Utilizator Neamtu_StefanStefan Neamtu Neamtu_Stefan Data 22 iunie 2017 21:09:35
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.76 kb
#include <fstream>
#include <cstring>

using namespace std;

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

char v[100002],fp[100002],op[100002];
int stiva[100002],nr,nrel,n,k;

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

    int l=strlen(v);

    n=k=0;

    for (int i=0;i<l;i++)
    {
        if (v[i]>='0' && v[i]<=9)
        {
            fp[++n]=v[i];
            if (v[i+1]<'0' || v[i+1]>'9') fp[++n]=',';
        }
        else if (v[i]=='(')
                op[++k]=v[i];
            else if(v[i]==')')
            {
                while (op[k]!='(')
                    fp[++n]=op[k--];
                k--;
            }
                else if (v[i]=='+' || v[i]=='-')
                {
                    char oper=v[i];
                    while (op[k]=='-' || op[k]=='+' || op[k]=='/' || op[k]=='*')
                        fp[++n]=op[k--];
                    op[++k]=oper;
                }
                    else if(v[i]=='/' || v[i]=='*')
                    {
                        char oper=v[i];
                        while (op[k]=='*' || op[k]=='/')
                            fp[++n]=op[k--];
                        op[++k]=oper;
                    }
    }

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

    for (int 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;
}