Pagini recente » Cod sursa (job #183058) | Cod sursa (job #907883) | Cod sursa (job #3292952) | Cod sursa (job #1392024) | Cod sursa (job #1188710)
#include <iostream>
#include <cstdio>
#include <cstring>
#define Nmax 100009
using namespace std;
char a[Nmax];
int t[Nmax],n;
int Slark(int st,int dr){
int i,j,sum=0,s;
for(i = st; i<= dr; i++){
if(t[i] >= 0){
j=i+1;
if(t[i-1] == -1 || i == st) s=t[i];
else if(t[i-1] == -2) s=-t[i];
while(t[j]!=-2 && t[j]!= -1 && j <= dr)
if(t[j] >= 0){
if(t[j-1] == -4) s*=t[j];
else if(t[j-1]==-5) s/=t[j];
j++;
}
sum+=s;
i=j;
}
}
return sum;
}
int main(){
int i,j,p,q,c;
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
scanf("%s",&a);
n = strlen(a);
for(i = 0,c = 0; i < n; i++){
j = i;
if(a[i] == '(') t[c++] = -3;
else if(a[i] == '-') t[c++] = -2;
else if(a[i] == '+') t[c++] = -1;
else if(a[i] == '*') t[c++] = -4;
else if(a[i] == '/') t[c++] = -5;
else if(a[i] >= '0' && a[i] <= '9'){
p=0;
while(a[j] >='0' && a[j] <='9')
p=p*10+a[j++]-'0';
t[c++] = p;
j--;
}
else if(a[i] == ')'){
q = c;
while(t[q--]!=-3)
;
q++;
t[q] = Slark(q+1,i-1);
c=q+1;
}
i = j;
}
cout << Slark(0,c-1);
// for(i=0;i<c;i++)
// cout << t[i]<<' ';
return 0;
}