Cod sursa(job #2289472)

Utilizator ioanaa_ghGhiorghi Ioana-Cristina ioanaa_gh Data 24 noiembrie 2018 17:25:35
Problema Evaluarea unei expresii Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.47 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, nr, semn = 1, ori = 0, cat = 0, p, sol = 0, j;
    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] == '*')
            ori = 1, i++;
        if(s[i] == '/')
            cat = 1, 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;
            if(ori == 1)
                st[top] = st[top] * nr, ori = 0;
            else if(cat == 1)
                st[top] = st[top] / nr, cat = 0;
            else st[++top] = nr;
        }
        if(s[i] == ')')
        {
            p = top;
            while(p > 0 && st[p] != 1000000001)
                p--;
            p++;
            st[p - 1] = 0;
            for(j = p; j <= top; j++)
                st[p - 1] += st[j];
            top = p - 1;
            i++;
        }
    }
    for(i = 1; i <= top; i++)
        sol += st[i];
    fout << sol << "\n";
    fin.close();
    fout.close();
    return 0;
}