Pagini recente » Cod sursa (job #792630) | Cod sursa (job #712324) | Cod sursa (job #1653281) | Cod sursa (job #2837038) | Cod sursa (job #1295428)
#include<fstream>
#include<iostream>
using namespace std;
char s[100005];
int q[100005];
int k=-1;
int INF=1000000001;
int o1=1000000002;
int o2=1000000003;
int o3=1000000004;
int o4=1000000005;
void Citire()
{
ifstream fin("evaluare.in");
fin>>s;
fin.close();
}
int Calc(int i)
{
while(i>=0 && q[i]!=-1) i--;
int place=i;
i+=2;
//*/
while(i<=k)
{
if(q[i]==o3)
{
q[i+1]=q[i-1]*q[i+1];
q[i-1]=q[i]=INF;
}
if(q[i]==o4)
{
q[i+1]=q[i-1]/q[i+1];
q[i-1]=q[i]=INF;
}
i+=2;
}
//+-
i=place+1;
while(q[i]>=INF) i++;
int n=q[i];
while(i<=k)
{
if(q[i]==o1)
{
while(q[i]>=INF) i++;
n+=q[i];
}
if(q[i]==o2)
{
while(q[i]>=INF) i++;
n-=q[i];
}
i++;
}
k=place;
q[k]=n;
return n;
}
void Rez()
{
int i=0;
while(s[i]!=0)
{
if(s[i]>=48 && s[i]<=58)
{
int n=0;
while(s[i]!=0 && s[i]>=48 && s[i]<=58 )
{
n=n*10+(s[i]-48);
i++;
}
q[++k]=n;
}
else{
if(s[i]=='(') q[++k]=-1;
else if(s[i]=='+') q[++k]=o1;
else if(s[i]=='-') q[++k]=o2;
else if(s[i]=='*') q[++k]=o3;
else if(s[i]=='/') q[++k]=o4;
else if(s[i]==')')
{
Calc(k);
}
i++;
}
}
}
int main()
{
Citire();
Rez();
ofstream fout("evaluare.out");
fout<<Calc(k)<<"\n";
return 0;
}