Cod sursa(job #2289494)

Utilizator ioanaa_ghGhiorghi Ioana-Cristina ioanaa_gh Data 24 noiembrie 2018 17:52:53
Problema Evaluarea unei expresii Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.35 kb
#include <bits/stdc++.h>

using namespace std;

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

int st[100005];

char s[100005];

/*
'(' = -1;
'+' = -2;
'-' = -3;
'*' = -4;
'/' = -5;
*/

int main()
{
    int i, top = 0, p, j, nr, k, semn = 1;
    fin >> s;
    for(i = 0; s[i]; )
    {
        if(s[i] == '(')
            st[++top] = 1000000001, i++;
        if(s[i] == '+')
            i++;
        if(s[i] == '-')
            semn = -1, i++;
        if(s[i] == '*')
            st[++top] = 1000000003, i++;
        if(s[i] == '/')
            st[++top] = 1000000004, i++;
        if('0' <= s[i] && s[i] <= '9')
        {
            nr = 0;
            while('0' <= s[i] && s[i] <= '9')
                nr = nr * 10 + (s[i] - '0'), i++;
            if(semn == -1)
                nr *= semn, semn = 1;
            st[++top] = nr;
        }
        if(s[i] == ')')
        {
            p = top;
            while(st[p] != 1000000001)
                p--;
            p++;
            for(j = p; j < top; j++)
            {
                if(st[j] == 1000000003)
                {
                    st[j - 1] = st[j - 1] * st[j + 1];
                    for(k = j; k <= top - 2; k++)
                        st[k] = st[k + 2];
                    top -= 2;
                }
                else if(st[j] == 1000000004)
                {
                    st[j - 1] = st[j - 1] / st[j + 1];
                    for(k = j; k <= top - 2; k++)
                        st[k] = st[k + 2];
                    top -= 2;
                }
            }
            st[p - 1] = 0;
            for(j = p; j <= top; j++)
                st[p - 1] += st[j];
            top = p - 1;
            i++;
        }
    }
    for(j = 1; j <= top; j++)
    {
        if(st[j] == 1000000003)
        {
            st[j - 1] = st[j - 1] * st[j + 1];
            for(k = j; k <= top - 2; k++)
                st[k] = st[k + 2];
                top -= 2;
        }
        else if(st[j] == 1000000004)
        {
            st[j - 1] = st[j - 1] / st[j + 1];
            for(k = j; k <= top - 2; k++)
                st[k] = st[k + 2];
                top -= 2;
        }
    }

    for(j = 2; j <= top; j++)
        st[1] += st[j];
    fout << st[1] << " ";
    fin.close();
    fout.close();
    return 0;
}