Cod sursa(job #2293574)

Utilizator mihai03Mihai Grigore mihai03 Data 1 decembrie 2018 11:20:25
Problema Evaluarea unei expresii Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.57 kb
#include    <fstream>
#include    <string.h>

using namespace std;

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

char c, semn[10000], st[10000];

int i, n, k, nr, gasitnr, fp[100000];

long long steval[100];

int main()
{
    while(fin >> c)
    {
        if(c >= '0' && c <= '9')
        {
            gasitnr =  1;
            nr = nr * 10 + (c - 48);
        }
        else
        {
            if(gasitnr)
            {
                n++;
                fp[n] = nr;
                nr = 0;
                gasitnr = 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(gasitnr)
    {
        n++;
        fp[n] = nr;
        nr = 0;
        gasitnr = 0;
    }
    while(k)
    {
        n++;
        semn[n] = st[k];
        k--;
    }
    k = 0;
    for(i = 1; i <= n; i++)
    {
        if(semn[i] != '+' && semn[i] != '-' && semn[i] != '*' && semn[i] != '/')
        {
            k++;
            steval[k] = fp[i];
        }
        else
        {
            switch(semn[i])
            {
            case '+':
                steval[k-1] += steval[k];
                break;
            case '-':
                steval[k-1] -= steval[k];
                break;
            case '*':
                steval[k-1] *= steval[k];
                break;
            case '/':
                steval[k-1] /= steval[k];
                break;
            }
            k--;
        }
    }
    fout << steval[1];
    return 0;
}