Pagini recente » Cod sursa (job #2964808) | Cod sursa (job #263780) | Cod sursa (job #1289566) | Cod sursa (job #1017208) | Cod sursa (job #1932918)
#include <fstream>
#include <cctype>
#define in "evaluare.in"
#define out "evaluare.out"
#define lgmax 100003
using namespace std;
ifstream fin(in);
ofstream fout(out);
typedef long long ll;
inline ll eval();
inline ll term();
inline ll factor();
char c[lgmax],*p = c;
inline ll eval()
{
ll rez = term();
while(*p == '+' || *p == '-' || *p == ' ')
{
switch(*p)
{
case '+':
++p;
rez += term();
break;
case '-':
++p;
rez -= term();
break;
default : ++p; break;
}
}
return rez;
}
inline ll term()
{
ll rez = factor();
while(*p == '*' || *p == '/' || *p == ' ')
{
switch(*p)
{
case '*':
++p;
rez *= factor();
break;
case '/':
++p;
rez /= factor();
break;
default : ++p; break;
}
}
return rez;
}
inline ll factor()
{
ll rez = 0;
while(*p == ' ') ++p;
if(*p == '(')
{
++p;
rez = eval();
++p;
}
else
{
while(isdigit(*p))
{
rez = rez*10 + *p - '0';
++p;
}
}
return rez;
}
int main()
{
fin.getline(c,lgmax);
fout<<eval()<<"\n";
fin.close(); fout.close();
return 0;
}