Pagini recente » Cod sursa (job #69378) | Cod sursa (job #841499) | Cod sursa (job #573911) | Cod sursa (job #2864750) | Cod sursa (job #3251986)
#include <fstream>
#include <string>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
class solver
{
string s;
int n;
string remove_spaces(const string &s) const
{
string answer;
for (const char &c : s)
if (c == ' ')
continue;
else
answer += c;
return answer;
}
int eval(int &i)
{
int answer = term(i);
while ((i < n) && (s[i] == '+' || s[i] == '-'))
{
if (s[i] == '+')
++i, answer += term(i);
else
++i, answer -= term(i);
}
return answer;
}
int term(int &i)
{
int answer = factor(i);
while ((i < n) && (s[i] == '*' || s[i] == '/'))
{
if (s[i] == '*')
++i, answer *= factor(i);
else
++i, answer /= factor(i);
}
return answer;
}
int factor(int &i)
{
if (i >= n)
return 0;
if (s[i] == '(')
{
++i;
int answer = eval(i);
++i;
return answer;
}
int answer = 0;
while ((i < n) && (s[i] >= '0' && s[i] <= '9'))
answer = answer * 10 + (int)(s[i] - '0'), ++i;
return answer;
}
public:
solver() = default;
~solver() = default;
solver(const string &input)
{
s = remove_spaces(input),
n = (int)s.size();
return;
}
int get()
{
int i = 0;
return eval(i);
}
};
int main()
{
string s;
f >> s;
solver X(s);
g << X.get() << '\n';
return 0;
}