Pagini recente » Cod sursa (job #236261) | Diferente pentru implica-te/arhiva-educationala intre reviziile 194 si 223 | Cod sursa (job #3291453) | Cod sursa (job #3292879) | Cod sursa (job #3294046)
#include <bits/stdc++.h>
#define N 100005
using namespace std;
char s[N], * p = s;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
long long Termen();
long long Factor();
long long Eval()
{
long long r = Termen();
while (*p == '+' || *p == '-')
switch (*p)
{
case '+': ++p; r += Termen(); break;
case '-': ++p; r -= Termen(); break;
}
return r;
}
long long Termen()
{
long long r = Factor();
while (*p == '*' || *p == '/')
switch (*p)
{
case '*': ++p; r *= Factor(); break;
case '/': ++p; r /= Factor(); break;
}
return r;
}
long long Factor()
{
long long r = 0;
if (*p == '(') { ++p; r = Eval(); ++p; }
else
{
while (*p >= '0' && *p <= '9')
{
r = r * 10 + *p - '0';
++p;
}
}
return r;
}
int main()
{
fin.get(s, N);
fout << Eval();
return 0;
}