Pagini recente » Cod sursa (job #539938) | Cod sursa (job #824363) | Cod sursa (job #3281086) | Cod sursa (job #2163592) | Cod sursa (job #3309194)
#include <fstream>
#include <cassert>
using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
const int nmax = 1e5;
string str;
int n, pos = 1;
/**
E = T + T + ...
T = F * F * ...
F = number or E
**/
int solve(int &pos);
int termen(int &pos);
int factor(int &pos);
int solve(int &pos){
int value = termen(pos);
for(; pos <= n && (str[pos] == '+' || str[pos] == '-'); ){
int sgn = ((str[pos] == '+') ? 1 : -1);
value += (sgn * termen(++pos));
}
return value;
}
int termen(int &pos){
int value = factor(pos);
for(; pos <= n && (str[pos] == '*' || str[pos] == '/'); ){
if(str[pos] == '*'){
value *= factor(++pos);
}else{ value /= factor(++pos); }
}
return value;
}
int factor(int &pos){
int value = 0;
if(str[pos] == '('){
pos++; value = solve(pos); pos++;
}else{
for(; pos <= n && '0' <= str[pos] && str[pos] <= '9'; pos++)
value = 10 * value + str[pos] - '0';
}
return value;
}
int main(){
in>>str; n = str.size();
str = '#' + str + '#';
out<<solve(pos)<<"\n";
return 0;
}