Pagini recente » Cod sursa (job #313113) | Cod sursa (job #2916573) | Cod sursa (job #2931597) | Cod sursa (job #1241984) | Cod sursa (job #2956497)
#include <bits/stdc++.h>
#pragma GCC optimize ("O3")
using namespace std;
ifstream fin ("evaluare.in");
ofstream fout ("evaluare.out");
string eval;
int poz, lim;
int number(){
int answer = 0;
while(poz < lim && ('0' <= eval[poz] && eval[poz] <= '9')){
answer = answer * 10 + (eval[poz] - '0');
poz++;
}
return answer;
}
int expresie();
int factor(){
int semn = 1;
while(poz < lim && (eval[poz] == '+' || eval[poz] == '-')){
if(eval[poz] == '-')
semn = (semn == 1 ? -1 : 1);
poz++;
}
int answer;
if(eval[poz] == '('){
poz++; ///sar peste (
answer = expresie();
poz++; ///sar peste )
return semn * answer;
}else{
return semn * number();
}
}
int termen(){
int answer = factor();
while(poz < lim && (eval[poz] == '*' || eval[poz] == '/')){
if(eval[poz] == '*'){
poz++; ///sar peste *
answer *= factor();
}else if(eval[poz] == '/'){
poz++; ///sar peste /
answer /= factor();
}
}
return answer;
}
int expresie(){
int answer = termen();
while(poz < lim && (eval[poz] == '+' || eval[poz] == '-')){
if(eval[poz] == '+'){
poz++; ///sar peste +
answer += termen();
}else if(eval[poz] == '-'){
poz++; ///sar peste -
answer -= termen();
}
}
return answer;
}
int main(){
ios_base::sync_with_stdio(false);
fin.tie(nullptr), fout.tie(nullptr);
fin>>eval;
poz = 0, lim = (int)eval.size();
fout<<expresie();
return 0;
}