Pagini recente » Cod sursa (job #1464486) | Cod sursa (job #3330444) | Cod sursa (job #3341403) | Cod sursa (job #1287893) | Cod sursa (job #3303443)
#include <fstream>
#include <cstdint>
using namespace std;
typedef int32_t i32;
constexpr char iname[] = "evaluare.in";
constexpr char oname[] = "evaluare.out";
string s;
i32 idx;
i32 eval();
i32 factor() {
i32 rez = 0;
if(s[idx] == '(') {
++idx;
rez = eval();
++idx;
return rez;
}
while(idx < static_cast<i32>(s.size()) && s[idx] >= '0' && s[idx] <= '9') {
rez = rez*10 + (s[idx] - '0');
++idx;
}
return rez;
}
i32 termen() {
i32 rez = factor();
while(idx < static_cast<i32>(s.size()) && (s[idx] == '*' || s[idx] == '/')) {
if(s[idx] == '*') {
++idx;
rez *= factor();
}
else {
++idx;
rez /= factor();
}
}
return rez;
}
i32 eval() {
i32 rez = termen();
while(idx < static_cast<i32>(s.size()) && (s[idx] == '+' || s[idx] == '-')) {
if(s[idx] == '+') {
++idx;
rez += termen();
} else {
++idx;
rez -= termen();
}
}
return rez;
}
i32 main() {
ifstream in(iname);
in >> s;
ofstream out(oname);
out << eval();
in.close(), out.close();
return 0;
}