Pagini recente » Cod sursa (job #1118991) | Cod sursa (job #2583971) | Cod sursa (job #2297887) | Cod sursa (job #2487907) | Cod sursa (job #3142445)
#include <iostream>
#include <fstream>
#define N_MAX 100'010
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char S[N_MAX], *p = S;
int i;
long termen();
long factor();
long evaluare()
{
long r = termen();
while (*p == '+' || *p == '-')
{
switch(*p)
{
case '+' : ++p; r += termen(); break;
case '-' : ++p; r -= termen(); break;
}
}
return r;
}
long termen()
{
long r = factor();
while (*p == '*' || *p == '/')
{
switch(*p)
{
case '*' : ++p; r *= factor(); break;
case '/' : ++p; r /= factor(); break;
}
}
return r;
}
long factor()
{
long r = 0;
if (*p == '(')
{
++p;
r = evaluare();
++p;
}
else
{
while (*p >= '0' && *p <= '9')
{
r = r * 10 + ((*p) - '0');
++p;
}
}
return r;
}
int main()
{
f.getline(S, N_MAX);
g << evaluare();
f.close();
g.close();
return 0;
}