Pagini recente » Cod sursa (job #1087710) | Cod sursa (job #1047325) | Cod sursa (job #2752111) | Cod sursa (job #1674935) | Cod sursa (job #916559)
Cod sursa(job #916559)
#include <fstream>
#include <string.h>
using namespace std;
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
char op[100005], s[100005];
int par[100005];
int kp;
int fac[100005];
int vf_op;
int vf;
int main()
{
cin.getline(s, 100002);
for(int i=0; s[i] ; )
{
if(isdigit(s[i]))
{
fac[++vf]=s[i]-'0';
while(isdigit(s[++i]))
fac[vf]=fac[vf]*10+s[i]-'0';
continue;
}
if(s[i]=='(')
{
par[++kp]=vf+1;
i++;
continue;
}
if(s[i]=='*')
if(fac[vf-1]==-1 || fac[vf-1]==-2 || vf-1==0)
{
int x=0;
while(isdigit(s[++i]))
x=x*10+s[i]-'0';
fac[vf]=fac[vf]*x;
continue;
}
if(s[i]=='/')
if(fac[vf-1]==-1 || fac[vf-1]==-2 || vf-1==0)
{
int x=0;
while(isdigit(s[++i]))
x=x*10+s[i]-'0';
fac[vf]=fac[vf]/x;
continue;
}
if(s[i]=='+')
{fac[++vf]=-1; i++ ;continue;}
if(s[i]=='-')
{fac[++vf]=-2; i++ ;continue;}
if(s[i]==')')
{
int a=fac[par[kp]], b;
for(int j=par[kp]+2;j<=vf;j+=2)
{
if(fac[j-1]==-1)
a=a+fac[j];
else a=a-fac[j];
}
fac[par[kp]]=a;
vf=par[kp];
--kp;
}
++i;
}
int a=fac[1];
for(int j=3;j<=vf;j+=2)
{
if(fac[j-1]==-1)
a=a+fac[j];
else a=a-fac[j];
}
cout<<a<<'\n';
cin.close();
cout.close();
return 0;
}