Pagini recente » Cod sursa (job #1322569) | Cod sursa (job #1859302) | Cod sursa (job #2720375) | Cod sursa (job #2563048) | Cod sursa (job #2870957)
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cassert>
using namespace std;
const int N=100000+7;
char s[N];
int n;
int p;
int readNum(){
assert('0'<=s[p]&&s[p]<='9');
int sol=0;
while(p<n&&'0'<=s[p]&&s[p]<='9'){
sol=10*sol+s[p++]-'0';
}
return sol;
}
int solve(){
assert(p<n);
int sol=1;
while(p<n&&(s[p]=='+'||s[p]=='-')){
if(s[p++]=='-'){
sol*=-1;
}
}
if(s[p]=='('){
p++;
sol*=solve();
assert(s[p]==')');
p++;
}else{
sol*=readNum();
}
while(p<n&&(s[p]=='*'||s[p]=='/')){
bool is_mul=(s[p++]=='*');
int cur=1;
assert(p<n);
if(s[p]=='('){
p++;
cur=solve();
assert(s[p]==')');
p++;
}else{
cur=readNum();
}
if(is_mul){
sol*=cur;
}else{
sol/=cur;
}
}
if(p<n&&(s[p]=='+'||s[p]=='-')){
sol+=solve();
}
return sol;
}
int main(){
freopen ("evaluare.in","r",stdin);
freopen ("evaluare.out","w",stdout);
scanf("%s",&s);
n=strlen(s);
cout<<solve()<<"\n";
}