Pagini recente » Cod sursa (job #3276660) | Cod sursa (job #1481126) | Cod sursa (job #3004122) | Cod sursa (job #2586030) | Cod sursa (job #1461710)
#include <cstdio>
#include <vector>
#include <cstring>
#include <iostream>
using namespace std;
char s[100000];
int verif(int l,int l1) {
int k=0;
for (int i=l; i<=l1; ++i)
if (s[i]=='(')
k++;
else if (s[i]==')')
k--;
if (k<0)
return 0;
if (k==0)
return 0;
}
int operatie(int l,int l1,char c1,char c2) {
int ok=0;
for (int i=l1; i>=l; --i)
if (s[i]=='(')
ok++;
else if (s[i]==')')
ok--;
else if (s[i]==c1 && ok==0 || s[i]==c2 && ok==0)
return i;
return -1;
}
int rezolv(int l,int l1) {
int x=verif(l,l1);
while (s[l]=='(' && s[l1]==')' && x) {
l++;
l1--;
x=verif(l,l1);
}
int v=operatie(l,l1,'+','-');
if (v>=0) {
if (s[v]=='+')
return rezolv(v+1,l1)+rezolv(l,v-1);
else if (s[v]=='-')
return rezolv(l,v-1)-rezolv(v+1,l1);
}
else {
int v=operatie(l,l1,'/','*');
if (v>=0) {
if (s[v]=='*')
return rezolv(v+1,l1)*rezolv(l,v-1);
else if (s[v]=='/')
return rezolv(l,v-1)/rezolv(v+1,l1);
} else {
int n=0;
for (int c=l; c<=l1; c++)
n=n*10+s[c]-'0';
return n;
}
}
}
int main() {
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
scanf("%s",&s);
int l=strlen(s);
printf("%d",rezolv(0,l-1));
return 0;
}