Cod sursa(job #2112284)
Utilizator | 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;
}