Cod sursa(job #2941860)

Utilizator Nitoi_BogdanNitoi Andrei-Bogdan Nitoi_Bogdan Data 18 noiembrie 2022 14:35:25
Problema Evaluarea unei expresii Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.18 kb
#include <fstream>
#include <cstring>

using namespace std;

ifstream cin ("evaluare.in");
ofstream cout ("evaluare.out");

char s[100005],stivaop[100005],kop;
int n, k,stivanr[100005],knr;



int evaluare (int a, int b, int op)
{
    if(op == '+')
        return a+b;
    else
        if(op == '-')
        return a-b;
    else
        if(op == '*')
        return a*b;
    else
        if(op == '/')
        return a/b;
}

int main()
{
    int prior[256];

prior['('] = 0;
prior['+'] = 1;
prior['-'] = 1;
prior['*'] = 2;
prior['/'] = 2;
    cin >> s;
    for(int i = 0; i<strlen(s); i++)
    {
        if(s[i] == '(')
        {
            stivaop[++kop] = '(';
        }
        else
        {
            if(s[i] == ')')
            {while(stivaop[kop] != '(')
            {
                char op = stivaop[kop];
                int a = stivanr[knr-1],b = stivanr[knr];
                int rez = evaluare(a,b,op);
                kop--;
                knr--;
                stivanr[knr] = rez;
            }
            kop --; /// elimin paranteza deschisa
            }
            else
                if(s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/')
            {
                while(kop > 0 && prior[s[i]]<=prior[stivaop[kop]])
                {
                char op = stivaop[kop];
                int a = stivanr[knr-1],b = stivanr[knr];
                int rez = evaluare(a,b,op);
                kop--;
                knr--;
                stivanr[knr] = rez;
                }
                stivaop[++kop] = s[i];
            }
            else
            {
                int nr = 0;
                while(isdigit(s[i]))
                {
                    nr = nr * 10 + s[i] - '0';
                    i++;
                }
                stivanr[++knr] = nr;
                i--;
            }
        }
    }
    while(kop > 0)
    {
        char op = stivaop[kop];
                int a = stivanr[knr-1],b = stivanr[knr];
                int rez = evaluare(a,b,op);
                kop--;
                knr--;
                stivanr[knr] = rez;
    }

cout << stivanr[1];
return 0;
}