Pagini recente » Cod sursa (job #1083148) | Cod sursa (job #1937551) | Cod sursa (job #2258648) | Cod sursa (job #1990201) | Cod sursa (job #2899244)
/// always:
#include <cstdio>
#include <string>
/// optional:
#include <cassert>
#include <cstring>
#include <iostream>
bool home = 1;
using namespace std;
const string TASKNAME="evaluare";
const int N=100000+7;
int p=0;
char s[N];
int read_term();
int get();
int read_term() {
int term;
if (s[p]=='(') {
p++;
term=get();
assert(s[p]==')');
p++;
}else{
int sgn=+1,num=0;
bool is=0;
while(s[p]=='-'||s[p]=='+') {
if (s[p]=='-') sgn*=-1;
p++;
}
while('0'<=s[p]&&s[p]<='9') {
num=10*num+s[p]-'0';
p++;
is=1;
}
num*=sgn;
if (!is) {
assert(0);
}
term=sgn*num;
}
return term;
}
int get() {
int sol=read_term();
while (s[p]=='*'||s[p]=='/') {
char op=s[p];
p++;
int term=read_term();
if (op=='*') sol*=term;
else sol/=term;
}
if (s[p]=='+' || s[p]=='-') {
char op=s[p];
p++;
int term=get();
if (op=='+') sol+=term;
else sol-=term;
}
return sol;
}
signed main() {
#ifdef INFOARENA
home = 0;
#endif
if(!home) {
freopen((TASKNAME + ".in").c_str(), "r", stdin);
freopen((TASKNAME + ".out").c_str(), "w", stdout);
}else{
freopen ("I_am_iron_man", "r", stdin);
}
scanf("%s",&s);
printf("%d\n", get());
}