Pagini recente » Cod sursa (job #2779330) | Cod sursa (job #56909) | Cod sursa (job #3280401) | Cod sursa (job #2917406) | Cod sursa (job #3173551)
#include <iostream>
#include <fstream>
std::string expr;
int ptr = 0;
int term();
int expression();
int factor();
int constant();
int expression() {
int ans = term();
while (expr[ptr] == '+' || expr[ptr] == '-') {
ptr++;
if (expr[ptr - 1] == '+') ans += term();
else if (expr[ptr - 1] == '-') ans -= term();
}
return ans;
}
int term() {
int ans = factor();
while (expr[ptr] == '*' || expr[ptr] == '/') {
ptr++;
if (expr[ptr - 1] == '*') ans *= factor();
else if (expr[ptr - 1] == '/') ans /= factor();
}
return ans;
}
int factor() {
int ans = 0;
if (expr[ptr] == '(') {
ptr++;
ans = expression();
ptr++;
} else ans = constant();
return ans;
}
int constant() {
int ans = 0;
while (std::isdigit(expr[ptr])) {
ans = ans * 10 + (expr[ptr] - '0');
ptr++;
}
return ans;
}
int main() {
std::ifstream input("evaluare.in");
std::ofstream output("evaluare.out");
input >> expr;
output << expression();
return 0;
}