Cod sursa(job #1499519)

Utilizator GuzgleteBumbu Alexandru Guzglete Data 10 octombrie 2015 18:57:17
Problema Evaluarea unei expresii Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.75 kb
#include <iostream>
#include <stack>
#include <fstream>
#include <string.h>

using namespace std;

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

stack <char> operatori;
stack <int> numere;
char x[100001];

void calcul ()
{
    int n1=numere.top();
    numere.pop();
    int n2=numere.top();
    numere.pop();
    char y=operatori.top();
    if (y=='+') numere.push(n1+n2);
    if (y=='-') numere.push(n2-n1);
    if (y=='/') numere.push(n2/n1);
    if (y=='*') numere.push(n2*n1);
    operatori.pop();
}

int main()
{
    fin.getline(x,100001);
    int i=0,nr=0;
    numere.push(0);
    operatori.push('(');
    while (i<strlen(x))
    {
            if (x[i]=='(')
            {
                operatori.push(x[i]);
                nr=0;
            }
            else
                if (x[i]==')')
                {
                    while (operatori.top()!='(')
                        calcul ();
                    operatori.pop();
                    nr=0;
                }
            else
                if (x[i]=='+'||x[i]=='-')
                {
                    if (operatori.top()!='(') calcul();
                    operatori.push(x[i]);
                    nr=0;
                }
            else
                if (x[i]=='*'||x[i]=='/')
            {
                if (operatori.top()!='(')
                        if (operatori.top()=='/') calcul();
                operatori.push(x[i]);
                nr=0;
            }

        else
        {
            nr=nr*10+(x[i]-'0');
            if (nr>=10) numere.pop();
            numere.push(nr);
        }
        i++;
    }

    while (operatori.top()!='(')
        calcul ();
    fout<<numere.top();
    return 0;
}