Pagini recente » Cod sursa (job #2744585) | Cod sursa (job #409038) | Cod sursa (job #70749) | Cod sursa (job #3242874) | Cod sursa (job #2219532)
#include <cstdio>
#include <cstring>
using namespace std;
int expresie();
int factor();
int termen();
bool is_digit();
int nr();
char v[100005];
int p;
int main()
{
v[0] = '(';
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
scanf("%s",v+1);
int n=strlen(v);
v[n]=')';
printf("%d",expresie());
return 0;
}
int factor()
{
int ans(expresie());
bool add;
while(v[p]=='*' or v[p]=='/') {
add=(v[p]=='*');
p++;
ans=(add?ans*expresie():ans/expresie());
}
return ans;
}
int termen()
{
int ans=0;
bool add=1;
if(v[p]=='+' or v[p]=='-'){
add=(v[p]=='+');
p++;
}
ans=(add?1:-1)*factor();
while(v[p]=='+' or v[p]=='-'){
add=(v[p]=='+');
p++;
ans+=(add?1:-1)*factor();
}
return ans;
}
int expresie()
{
if(is_digit())
return nr();
p++;
int x=termen();
p++;
return x;
}
bool is_digit()
{
return ('0'<=v[p] and v[p]<='9');
}
int nr()
{
int ans(0);
while(is_digit()){
ans=10*ans+v[p]-'0';
p++;
}
return ans;
}