Pagini recente » Cod sursa (job #2610960) | Cod sursa (job #2065567) | Cod sursa (job #933915) | Cod sursa (job #2689228) | Cod sursa (job #567534)
Cod sursa(job #567534)
#include <stdio.h>
#include <string.h>
using namespace std;
char a[100100];
int b[100100];
int n;
int k;
void citire()
{
gets(a);
n=strlen(a);
a[n]=')';
n++;
for(int i=0;i<100010;++i)
b[i]=1;
}
int rez(int &i)
{
int inceput=k;
for(;i<n;)
{
if(a[i]=='(')
{
b[k++]*=rez(++i);
i++;
k++;
}
else
if(a[i]==')')
{
int s=0;
--k;
for(;inceput<=k;--k)
{
s+=b[k];
b[k]=1;
}
return s;
}
else
if(a[i]>='0' && a[i]<='9')
{
int x;
sscanf(a+i,"%d",&x);
for(;a[i]>='0' && a[i]<='9';++i);
b[k++]*=x;
}
if(a[i]=='+' || a[i]=='-' )
{
int x;
int semn=1;
if(a[i]=='-')
semn*=-1;
i++;
if(a[i]=='(')
{
x=rez(++i);
i++;
k++;
}
else
{
sscanf(a+i,"%d",&x);
for(;a[i]>='0' && a[i]<='9';++i);
}
b[k++]=x*semn;
//for(;a[i]>='0' && a[i]<='9';++i);
// b[k++]=x;
}
else
if(a[i]=='*' || a[i]=='/')
{
char c=a[i];
++i;
int x;
if(a[i]=='(')
{
x=rez(++i);
i++;
k++;
}
else
{
sscanf(a+i,"%d",&x);
for(;a[i]>='0' && a[i]<='9';++i);
}
if(c=='*')
b[k-1]*=x;
else
b[k-1]/=x;
}
}
}
int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
citire();
int i=0;
printf("%d",rez(i));
return 0;
}