Pagini recente » Cod sursa (job #94071) | Cod sursa (job #979474) | Cod sursa (job #2167248) | Cod sursa (job #278025) | Cod sursa (job #1638186)
#include <fstream>
#include <stack>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char s[100005],op[100005];
int a[100005];
stack <int>S;
int Evaluare(int x,int y)
{int v=a[x],v1;
int i;
for(i=x+1;i<=y;++i)
{if(op[i-1]=='+'){v=v+Evaluare(i,y);break;}
else if(op[i-1]=='-'){a[i]=-a[i];v=v+Evaluare(i,y);break;}
else if(op[i-1]=='/')v=v/a[i];
else if(op[i-1]=='*')v=v*a[i];
}
// fout<<x<<" "<<v<<"\n";
return v;
}
int main()
{int ct=0,i;
fin>>s;
int nr;
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]-48;
i++;
}
i--;
ct++;a[ct]=nr;
}
else if(s[i]=='(')S.push(ct+1);
else if(s[i]==')'){a[S.top()]=Evaluare(S.top(),ct);ct=S.top();S.pop();
//fout<<S.top()<<" "<<ct<<"\n";
}
else if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/')op[ct]=s[i];
}
fout<<Evaluare(1,ct);
}