Pagini recente » Cod sursa (job #117168) | Cod sursa (job #3277472) | Cod sursa (job #1653824) | Cod sursa (job #3290669) | Cod sursa (job #2793728)
#include <bits/stdc++.h>
using namespace std;
// Sum = Product +- Product +- Product
// Product = Element /* Element /* ...
// Element = Number or (Sum)
class Evaluator {
private:
string expression;
int index = 0;
public:
Evaluator(const string &_expression) : expression(_expression) {}
int getSum() {
int sum = getProduct();
while(index < expression.size() && (expression[index] == '+' || expression[index] == '-')) {
if(expression[index] == '+') {
index ++;
sum += getProduct();
} else {
index ++;
sum -= getProduct();
}
}
return sum;
}
int getProduct() {
int product = getElement();
while(index < expression.size() && (expression[index] == '*' || expression[index] == '/')) {
if(expression[index] == '*') {
index ++;
product *= getElement();
} else {
index ++;
product /= getElement();
}
}
return product;
}
int getElement() {
int answer;
if(expression[index] == '(') {
index ++;
answer = getSum();
index ++;
} else {
answer = getNumber();
}
return answer;
}
int getNumber() {
int number = 0;
while(index < expression.size() && '0' <= expression[index] && expression[index] <= '9') {
number *= 10;
number += (expression[index] - '0');
index ++;
}
return number;
}
};
int main() {
ifstream in("evaluare.in");
ofstream out("evaluare.out");
string s;
in >> s;
Evaluator solver(s);
out << solver.getSum();
return 0;
}