Pagini recente » Cod sursa (job #2940835) | Cod sursa (job #553471) | Cod sursa (job #1335431) | Cod sursa (job #2357907) | Cod sursa (job #357252)
Cod sursa(job #357252)
#include <cstdio>
#include <cstring>
char a[100000];
int n;
int getExpression(int pos);
int getNumber(int i){
int nr=0;
while(a[i]>='0'&&a[i]<='9'){
nr=nr*10+a[i]-48;
i++;
}
return nr;
}
int getProduct(int pos){
int i,nr=1,l=pos;
for(i=pos;i<n;i++){
if(a[i]=='*'||a[i]=='/'){
if(l==pos)
nr*=getNumber(l);
else if(a[l]=='*')
nr*=getNumber(l+1);
else if(a[l]=='/')
nr/=getNumber(l+1);
l=i;
}
else if(a[i]==')'||a[i]=='+'||a[i]=='-'){
if(l==pos)
nr*=getNumber(l);
else if(a[l]=='*')
nr*=getNumber(l+1);
else if(a[l]=='/')
nr/=getNumber(l+1);
return nr;
}
else if(a[i]=='('){
int j=i+1,p=1;
while(p){
if(a[j]==')')
p--;
else if(a[j]=='(')
p++;
j++;
}
if(l==pos)
nr*=getExpression(l+1);
else if(a[l]=='*')
nr*=getExpression(l+2);
else if(a[l]=='/')
nr/=getExpression(l+2);
l=j;
if(a[j]==')')
i=j-1;
else
i=j;
}
}
}
int getExpression(int pos){
int i,nr=0,l=pos;
for(i=pos;i<n;i++){
if(a[i]=='+'||a[i]=='-'){
if(l==pos)
nr+=getNumber(l);
else if(a[l]=='+')
nr+=getNumber(l+1);
else if(a[l]=='-')
nr-=getNumber(l+1);
l=i;
}
else if(a[i]=='*'||a[i]=='/'){
if(l==pos)
nr+=getProduct(l);
else if(a[l]=='+')
nr+=getProduct(l+1);
else if(a[l]=='-')
nr-=getProduct(l+1);
int j,p;
for(j=i;j<n;j++)
if(a[j]=='('){
p=1;j++;
while(p){
if(a[j]==')')
p--;
if(a[j]=='(')
p++;
j++;
}
j--;
}
else if(a[j]=='+'||a[j]=='-'||a[j]==')')
break;
if(a[j]==')')
return nr;
l=j;
i=j;
}
else if(a[i]==')'){
if(l==pos)
nr+=getNumber(l);
else if(a[l]=='+')
nr+=getNumber(l+1);
else if(a[l]=='-')
nr-=getNumber(l+1);
return nr;
}
else if(a[i]=='('){
int j=i+1,p=1;
while(p){
if(a[j]==')')
p--;
else if(a[j]=='(')
p++;
j++;
}
if(a[j]=='+'||a[j]=='-'||a[j]==')'){
if(l==pos)
nr+=getExpression(l+1);
else if(a[l]=='+')
nr+=getExpression(l+2);
else if(a[l]=='-')
nr-=getExpression(l+2);
}
else{
if(l==pos)
nr+=getProduct(l);
else if(a[l]=='+')
nr+=getProduct(l+1);
else if(a[l]=='-')
nr-=getProduct(l+1);
for(;j<n;j++)
if(a[j]=='('){
p=1;j++;
while(p){
if(a[j]==')')
p--;
if(a[j]=='(')
p++;
j++;
}
j--;
}
else if(a[j]=='+'||a[j]=='-'||a[j]==')')
break;
if(a[j]==')')
return nr;
}
l=j;
if(a[j]==')')
i=j-1;
else
i=j;
}
}
}
int main(){
freopen("evaluare.in","rt",stdin);
freopen("evaluare.out","wt",stdout);
scanf("%s",a);
n=strlen(a);
a[n]=')';
n++;
printf("%d\n",getExpression(0));
return 0;
}