Pagini recente » Cod sursa (job #622615) | Cod sursa (job #1156077) | Cod sursa (job #618174) | Cod sursa (job #407221) | Cod sursa (job #1012393)
#include<stdio.h>
#include<string.h>
using namespace std;
char s[100100];
int p[100100],r[100100];
int l,k,i,last,rez;
void transterm();
void transexp();
void transfactor()
{
if(s[i]=='(')
{
++i;
transexp();
++i;
return;
}
int x=0;
while(s[i]>='0' && s[i]<='9')
{
x = x*10 + s[i] - '0';
++i;
}
p[k++]=x;
}
void transterm()
{
transfactor();
while (i<l && (s[i]=='*' || s[i]=='/'))
{
char c=s[i];
++i;
transfactor();
p[k++]=c+1000000000;
}
}
void transexp()
{
transterm();
while (i<l && s[i]=='+' || s[i]=='-')
{
char c=s[i];
++i;
transterm();
p[k++]=c+1000000000;
}
}
int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
scanf("%s",s);
l=strlen(s);
transexp();
/*for(i=0;i<k;++i)
printf("%d ",p[i]);*/
i=0;
while(i<k || last>1)
{
//printf("%d\n",last);
if(i<k)
r[++last]=p[i];
if(r[last]>1000000000)
{
if(r[last-1]<=1000000000 && r[last-2]<=1000000000)
{
char c = r[last]-1000000000;
if(c=='+')
{
rez=r[last-1]+r[last-2];
}
else if(c=='-')
{
rez=r[last-2]-r[last-1];
}
else if(c=='*')
{
rez=r[last-1]*r[last-2];
}
else
{
rez=r[last-2]/r[last-1];
}
last-=2;
r[last]=rez;
}
}
++i;
}
printf("%d",rez);
return 0;
}