Cod sursa(job #2229054)

Utilizator bojemoiRadu Mamaliga bojemoi Data 5 august 2018 19:42:44
Problema Evaluarea unei expresii Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 2.04 kb
#include <bits/stdc++.h>
using namespace std;

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


stack<char>rat;
stack<int>tori;
char infix[100005];
int n;


int prioritet(char op){
    if(op=='+') return 1;
    if(op=='-') return 1;
    if(op=='*') return 2;
    if(op=='/') return 2;
    return 0;
}

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



int main (){
    fin.get(infix,100005);
    n = strlen(infix);
    int i = 0;
    while(i<n){
        char curent = infix[i];
        if(curent>47 && curent<58){
            int num = 0;
            while(curent>47 && curent<58){
                num = num*10+(curent-'0');
                i++;
                curent = infix[i];
            }
            i--;
            curent=infix[i];
            tori.push(num);
        }
        else if(curent == '(') rat.push('(');
        else if(curent == ')'){
            while(rat.top()!='('){
                    int v1 = tori.top();
                    tori.pop();
                    int v2 = tori.top();
                    tori.pop();
                    char c = rat.top();
                    rat.pop();
                    tori.push(resh(v1,v2,c));
                  }
                  rat.pop();
        }
        else{
            while(!rat.empty() && (prioritet(rat.top())>prioritet(curent))){
                    int v1 = tori.top();
                    tori.pop();
                    int v2 = tori.top();
                    tori.pop();
                    char c = rat.top();
                    rat.pop();

                    tori.push(resh(v1,v2,c));
            }

        rat.push(curent);
        }
        i++;
    }

    while(!rat.empty()){
        int v1 = tori.top();
        tori.pop();
        int v2 = tori.top();
        tori.pop();
        char c = rat.top();
        rat.pop();
        tori.push(resh(v1,v2,c));
    }
    fout<<tori.top();


  return 0;
}