Pagini recente » Cod sursa (job #2246432) | Cod sursa (job #878817) | Cod sursa (job #37684) | Cod sursa (job #591797) | Cod sursa (job #548252)
Cod sursa(job #548252)
#include <cstdio>
using namespace std;
char x,b[100001];
int n,m,nr,a[100001];
void calcul();
int main(){
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
nr=0;
x='1';
while (x!=0&&x!='\n'){
scanf("%c",&x);
if (x>='0'&&x<='9') nr*=10,nr+=x-'0';
else {
a[++n]=nr;
b[++m]=x;
nr=0;
}
if (b[n]==')')calcul();
}
int i,j;
i=1;j=n;
while (i<=j){
if (b[i]=='*') a[i+1]=a[i]*a[i+1],b[i]='+',a[i]=0;
if (b[i]=='/') a[i+1]=a[i]/a[i+1],b[i]='+',a[i]=0;
++i;
}
for(i=1;i<=n;++i)
if (b[i]=='+') a[1]+=a[i+1];
else a[1]-=a[i+1];
printf("%d\n",a[1]);
return 0;
}
void calcul(){
int sum,i=n,j=n,k;
if (b[i-1]=='('&&b[j]==')'){
a[i-1]=a[i];a[i]=0;
b[i-1]=b[i]=0;
n-=2;m-=2;
nr=a[i-1];
return;
}
while (b[i]!='(') --i;++i;
k=i;
while (i<j){
if (b[i]=='*') a[i+1]=a[i]*a[i+1],b[i]='+',a[i]=0;
if (b[i]=='/') a[i+1]=a[i]/a[i+1],b[i]='+',a[i]=0;
++i;
}
sum=a[k];
for(i=k;i<j;++i)
if (b[i]=='+') sum+=a[i+1];
else sum-=a[i+1];
--k;
for(i=j;i>=k;--i) b[i]=0,a[i]=0;
a[k]=sum;
nr=sum;
n=m=k-1;
return;
}