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