Pagini recente » Cod sursa (job #732170) | Cod sursa (job #2537468) | Cod sursa (job #1151553) | Cod sursa (job #1064531) | Cod sursa (job #3041188)
#include <bits/stdc++.h>
#define STOP pos < (int)s.size()
using namespace std;
ifstream in ("evaluare.in");
ofstream out ("evaluare.out");
string s;
int pos = 0;
int solve1(); /// +-
int solve2(); /// */
int solve3(); /// ()
int numar()
{
int x = 0;
while (STOP && isdigit(s[pos]))
x = x * 10 + s[pos] - '0', pos++;
return x;
}
int solve1()
{
int res = solve2();
while (STOP && (s[pos] == '+' || s[pos] == '-'))
{
pos++;
if (s[pos-1] == '+')
res += solve2();
else
res -= solve2();
}
return res;
}
int solve2()
{
int res = solve3();
while (STOP && (s[pos] == '*' || s[pos] == '/'))
{
pos++;
if (s[pos-1] == '*')
res *= solve3();
else
res /= solve3();
}
return res;
}
int solve3()
{
int res;
if (s[pos] == '(')
{
pos++;
res = solve1();
pos++;
}
else
res = numar();
return res;
}
int main()
{
in >> s;
out << solve1();
return 0;
}