Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #263809) | Monitorul de evaluare | Cod sursa (job #1589777)
#include <fstream>
#define NMax 100010
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
int pos;
char expr[NMax];
int ord2(), ord3();
int ord1()
{
int res = ord2();
while (expr[pos] == '+' || expr[pos] == '-') {
if (expr[pos] == '+') {
++pos;
res = res + ord2();
}
else {
++pos;
res = res - ord2();
}
}
return res;
}
int ord2()
{
int res = ord3();
while (expr[pos] == '*' || expr[pos] == '/') {
if (expr[pos] == '*') {
++pos;
res = res * ord3();
}
else {
++pos;
res = res / ord3();
}
}
return res;
}
int ord3()
{
int res = 0;
if (expr[pos] == '(') {
++pos;
res = ord1();
++pos;
}
else {
while (expr[pos] >= '0' && expr[pos] <= '9') {
res = res * 10 + (expr[pos] - '0');
pos++;
}
}
return res;
}
int main()
{
f.get(expr, NMax);
g << ord1();
}