Pagini recente » Cod sursa (job #851018) | Cod sursa (job #2325268) | Cod sursa (job #1022396) | Cod sursa (job #2266036) | Cod sursa (job #2918198)
#include <bits/stdc++.h>
#pragma GCC optimize ("Ofast")
using namespace std;
ifstream fin ("evaluare.in");
ofstream fout ("evaluare.out");
string expresie;
int X(int &poz), F(int &poz), T(int &poz), E(int &poz);
int main (){
ios_base::sync_with_stdio(false);
fin.tie(nullptr), fout.tie(nullptr);
fin>>expresie;
int p = 0;
fout<<E(p);
return 0;
}
/// X = cif sau X*10 + cif
int X(int &poz){
int answer = 0;
while(poz < (int)expresie.size() && '0' <= expresie[poz] && expresie[poz] <= '9'){
answer = answer * 10 + (expresie[poz] - '0');
poz++;
}
return answer;
}
/// F = X sau ( E )
int F(int &poz){
int answer;
if(expresie[poz] == '('){ /// ( E )
poz++; ///sar peste '('
answer = E(poz);
poz++; ///sar peste ')'
}else /// X
answer = X(poz);
return answer;
}
/// T = F sau F*/X
int T(int &poz){
int answer = F(poz);
while(true)
if(expresie[poz] == '*'){
poz++; ///sar peste '*'
answer *= F(poz);
}else if(expresie[poz] == '/'){
poz++; ///sar peste '/'
answer /= F(poz);
}else
break;
return answer;
}
/// E = E sau E+-T
int E(int &poz){
int answer = T(poz);
while(true)
if(expresie[poz] == '+'){
poz++; ///sar peste '+'
answer += T(poz);
}else if(expresie[poz] == '-'){
poz++; ///sar peste '-'
answer -= T(poz);
}else
break;
return answer;
}