Cod sursa(job #2285208)

Utilizator anamariatoaderAna Toader anamariatoader Data 18 noiembrie 2018 12:09:39
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.48 kb
#include <fstream>

using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
int i,val[100000],nr,k1,k2,rez;
char s[100001],op[100000],pr[100];
int operatie(char c, int a, int b){
    if(c=='+')
        return a+b;
    if(c=='-')
        return a-b;
    if(c=='*')
        return a*b;
    if(c=='/')
        return a/b;
}
int main()
{
    fin>>s;
    pr['+']=pr['-']=1;
    pr['*']=pr['/']=2;
    for(i=0;s[i]!=0;i++){
        if(s[i]>='0' && s[i]<='9'){
            nr=0;
            while(s[i]>='0' && s[i]<='9'){
                nr=nr*10+s[i]-'0';
                i++;
            }
            i--;
            val[++k2]=nr;
        }
        else
        if(s[i]=='(')
            op[++k1]='(';
        else{
            if(s[i]==')'){
                while(op[k1]!='('){
                    rez=operatie(op[k1],val[k2-1],val[k2]);
                    k1--;
                    k2--;
                    val[k2]=rez;
                }
                k1--;
            }
            else{
                while(k1>0 && pr[op[k1]]>=pr[s[i]]){
                    rez=operatie(op[k1],val[k2-1],val[k2]);
                    k1--;
                    k2--;
                    val[k2]=rez;
                }
                op[++k1]=s[i];
            }
        }
    }
     while(k1>0){
        rez=operatie(op[k1],val[k2-1],val[k2]);
        k1--;
        k2--;
        val[k2]=rez;
    }
    fout<<val[1];
    return 0;
}