Cod sursa(job #2128049)

Utilizator FunnyStockyMihnea Andreescu FunnyStocky Data 11 februarie 2018 13:28:08
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 2.83 kb
#include<fstream>
#include<cstring>
#include<cctype>
using namespace std;
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
const int nmax=100000;
char s[nmax+5];
int n;
int stiva_nr[nmax+5],vf_nr;
int stiva_semne[nmax+5],vf_semne;
int main()
{
    cin.getline(s,nmax+5);
    n=strlen(s);
    for(int i=0;i<n;i++)
    {
        if(isdigit(s[i]))
        {
            if(i==0 or !isdigit(s[i-1]))
                stiva_nr[++vf_nr]=s[i]-'0';
            else
                stiva_nr[vf_nr]=stiva_nr[vf_nr]*10+s[i]-'0';
        }
        if(s[i]=='(')
            stiva_semne[++vf_semne]='(';
        if(s[i]==')')
        {
            while(stiva_semne[vf_semne]!='(')
            {
                vf_nr--;
                if(stiva_semne[vf_semne]=='+')
                    stiva_nr[vf_nr]+=stiva_nr[vf_nr+1];
                if(stiva_semne[vf_semne]=='-')
                    stiva_nr[vf_nr]-=stiva_nr[vf_nr+1];
                if(stiva_semne[vf_semne]=='*')
                    stiva_nr[vf_nr]*=stiva_nr[vf_nr+1];
                if(stiva_semne[vf_semne]=='/')
                    stiva_nr[vf_nr]/=stiva_nr[vf_nr+1];
                vf_semne--;
            }
            vf_semne--;
        }
        if(s[i]=='*' or s[i]=='/')
        {
            while(vf_semne and (stiva_semne[vf_semne]=='*') or (stiva_semne[vf_semne]=='/'))
            {
                vf_nr--;
                if(stiva_semne[vf_semne]=='*')
                    stiva_nr[vf_nr]*=stiva_nr[vf_nr+1];
                if(stiva_semne[vf_semne]=='/')
                    stiva_nr[vf_nr]/=stiva_nr[vf_nr+1];
                vf_semne--;
            }
            stiva_semne[++vf_semne]=s[i];
        }
        if(s[i]=='+' or s[i]=='-')
        {
            while(vf_semne and stiva_semne[vf_semne]!='(')
            {
                vf_nr--;
                if(stiva_semne[vf_semne]=='+')
                    stiva_nr[vf_nr]+=stiva_nr[vf_nr+1];
                if(stiva_semne[vf_semne]=='-')
                    stiva_nr[vf_nr]-=stiva_nr[vf_nr+1];
                if(stiva_semne[vf_semne]=='*')
                    stiva_nr[vf_nr]*=stiva_nr[vf_nr+1];
                if(stiva_semne[vf_semne]=='/')
                    stiva_nr[vf_nr]/=stiva_nr[vf_nr+1];
                vf_semne--;
            }
            stiva_semne[++vf_semne]=s[i];
        }
    }
    while(vf_semne)
    {
        vf_nr--;
        if(stiva_semne[vf_semne]=='+')
            stiva_nr[vf_nr]+=stiva_nr[vf_nr+1];
        if(stiva_semne[vf_semne]=='-')
            stiva_nr[vf_nr]-=stiva_nr[vf_nr+1];
        if(stiva_semne[vf_semne]=='*')
            stiva_nr[vf_nr]*=stiva_nr[vf_nr+1];
        if(stiva_semne[vf_semne]=='/')
            stiva_nr[vf_nr]/=stiva_nr[vf_nr+1];
        vf_semne--;
    }
    cout<<stiva_nr[1];
    return 0;
}
/**


**/