Cod sursa(job #2112284)

Utilizator AndaionicaIonica Anda Maria Andaionica Data 23 ianuarie 2018 12:06:49
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.83 kb
#include <fstream>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char op[100001],s[100001];
int k1,k2,i,nr,v[100001],pr[256];
int calcul(int x1,int x2,char op){
    if(op=='+')
        return x1+x2;
    if(op=='-')
        return x1-x2;
    if(op=='*')
        return x1*x2;
    if(op=='/')
        return x1/x2;
}
int main()
{
    f>>s;
    pr['+']=pr['-']=1;
    pr['*']=pr['/']=2;
    for(i=0;s[i]!=0;i++){
        if(s[i]>='0'&&s[i]<='9'){
            k2++;
            nr=0;
            while(s[i]>='0'&&s[i]<='9'){
                nr=nr*10+s[i]-'0';
                i++;
            }
            v[k2]=nr;
            i--;
        }
            else{
                if(s[i]=='(')
                    op[++k1]=s[i];
                        else{
                            if(s[i]==')'){
                                while(op[k1]!='('){
                                    nr=calcul(v[k2-1],v[k2],op[k1]);
                                    k1--;
                                    k2--;
                                    v[k2]=nr;
                                }
                                k1--;
                            }
                                else{
                                    while(k1>0&&pr[s[i]]<=pr[op[k1]]){
                                        nr=calcul(v[k2-1],v[k2],op[k1]);
                                        k1--;
                                        k2--;
                                        v[k2]=nr;
                                    }
                                    op[++k1]=s[i];
                                }
                        }
            }
    }
    while(k1){
        nr=calcul(v[k2-1],v[k2],op[k1]);
        k1--;
        k2--;
        v[k2]=nr;
    }
    g<<v[1];
    return 0;
}