Pagini recente » Cod sursa (job #336419) | Cod sursa (job #3210809) | Cod sursa (job #2219728) | Cod sursa (job #14654) | Cod sursa (job #1418820)
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <cctype>
using namespace std;
typedef unsigned int ui;
int eval(const string &A, ui &pos);
int termen(const string &A, ui &pos);
int factor(const string &A, ui &pos) {
if (A[pos] == '(') {
++pos;
int r = eval(A, pos);
++pos;
return r;
} else {
int r = 0;
while(pos < A.size() && isdigit(A[pos])) {
r = r*10 + A[pos] - '0';
++pos;
}
return r;
}
}
int eval(const string &A, ui &pos) {
int r = termen(A, pos);
while (pos < A.size() && (A[pos] == '+' || A[pos] == '-')) {
switch (A[pos]) {
case '+': ++pos; r += termen(A, pos); break;
case '-': ++pos; r -= termen(A, pos); break;
}
}
return r;
}
int termen(const string &A, ui &pos) {
int r = factor(A, pos);
while (pos < A.size() && (A[pos] == '*' || A[pos] == '/')) {
switch (A[pos]) {
case '*': ++pos; r *= factor(A, pos); break;
case '/': ++pos; r /= factor(A, pos); break;
}
}
return r;
}
int main()
{
ifstream f ("evaluare.in");
ofstream g ("evaluare.out");
string A;
f >> A;
ui pos = 0;
int ans = eval(A, pos);
g << ans << '\n';
return 0;
}