Cod sursa(job #2195059)

Utilizator adimiclaus15Miclaus Adrian Stefan adimiclaus15 Data 15 aprilie 2018 00:33:12
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 2.51 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char c,semn[100001],st[10001];
int i,n,k,nr,sw,numere[100001];
long long rez[101];
int main()
{
    while(f>>c)
    {
        if(c>='0' && c<='9')
        {
            sw=1;
            nr=nr*10+(c-48);
        }
        else
        {
            if(sw==1)
            {
                n++;
                numere[n]=nr;
                nr=0;
                sw=0;
            }
            if(c=='(' || c=='+' || c=='-' || c=='*' || c=='/')
            {
                k++;
                st[k]=c;
                if(st[k]=='+' || st[k]=='-')
                {
                    while(st[k-1]=='+' || st[k-1]=='-' || st[k-1]=='*' || st[k-1]=='/')
                    {
                        n++;
                        semn[n]=st[k-1];
                        st[k-1]=st[k];
                        k--;
                    }
                }
                if(st[k]=='*' || st[k]=='/')
                {
                    while(st[k-1]=='*' || st[k-1]=='/')
                    {
                        n++;
                        semn[n]=st[k-1];
                        st[k-1]=st[k];
                        k--;
                    }
                }
            }
            else
            {
                if(c==')')
                {
                    while(st[k]!='(')
                    {
                        n++;
                        semn[n]=st[k];
                        k--;
                    }
                    k--;
                }
            }
        }
    }
    if(sw==1)
    {
        n++;
        numere[n]=nr;
        sw=0;
        nr=0;
    }
    while(k>0)
    {
        n++;
        semn[n]=st[k];
        k--;
    }
    k=0;
    for(i=1;i<=n;i++)
    {
        if(semn[i]!='+' && semn[i]!='-' && semn[i]!='*' && semn[i]!='/')
        {
            k++;
            rez[k]=numere[i];
        }
        else
        {
            if(semn[i]=='+')
            {
                rez[k-1]=rez[k-1]+rez[k];
            }
            if(semn[i]=='-')
            {
                rez[k-1]=rez[k-1]-rez[k];
            }
            if(semn[i]=='*')
            {
                rez[k-1]=rez[k-1]*rez[k];
            }
            if(semn[i]=='/')
            {
                rez[k-1]=rez[k-1]/rez[k];
            }
            k--;
        }
    }
    g<<rez[1];
    return 0;
}