Pagini recente » Autentificare | Cod sursa (job #2831084) | Cod sursa (job #2493184) | Cod sursa (job #2124673) | Cod sursa (job #2943731)
#include <fstream>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char x[100001],s2[100001],prior[256];
int s1[100001],k1,k2;
int evaluare(int a,int b,char op)
{
if(op=='+')
return a+b;
else if(op=='-')
return a-b;
else if(op=='*')
return a*b;
else
return a/b;
}
int main()
{
prior['(']=0;
prior['+']=prior['-']=1;
prior['*']=prior['/']=2;
fin>>(x+1);
for(int i=1;x[i]!='\0';i++)
{
if(x[i]=='(')
{
k2++;
s2[k2]=x[i];
}
else if(x[i]==')')
{
while(s2[k2]!='(')
{
char op=s2[k2];
int a=s1[k1-1],b=s1[k1];
int rez=evaluare(a,b,op);
s1[k1-1]=rez;
k2--;
k1--;
}
k2--;
}
else if(x[i]>='0' && x[i]<='9')
{
int nr=0;
while(x[i]>='0' && x[i]<='9')
{
nr=nr*10+x[i]-'0';
i++;
}
i--;
k1++;
s1[k1]=nr;
}
else
{
while(k2>0 && prior[x[i]]<=prior[s2[k2]])
{
char op=s2[k2];
int a=s1[k1-1],b=s1[k1];
int rez=evaluare(a,b,op);
s1[k1-1]=rez;
k2--;
k1--;
}
s2[++k2]=x[i];
}
}
while(k2>0)
{
char op=s2[k2];
int a=s1[k1-1],b=s1[k1];
int rez=evaluare(a,b,op);
s1[k1-1]=rez;
k2--;
k1--;
}
fout<<s1[k1];
return 0;
}