Pagini recente » Cod sursa (job #526688) | Cod sursa (job #1376190) | Cod sursa (job #1739702) | Cod sursa (job #2207467) | Cod sursa (job #1912527)
#include <fstream>
#include <cstring>
#define NMAX 100005
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char c[NMAX];
int pos = 0;
int eval();
int factor();
int termen();
int eval()
{
int ans = termen();
while (c[pos] == '+' || c[pos] == '-')
if (c[pos] == '+')
{
pos ++;
ans += termen();
}
else
{
pos ++;
ans -= termen();
}
return ans;
}
int termen()
{
int ans = factor();
while (c[pos] == '*' || c[pos] == '/')
if (c[pos] == '*')
{
pos ++;
ans *= factor();
}
else
if (c[pos] == '/')
{
pos ++;
ans /= factor();
}
return ans;
}
int factor()
{
int ans = 0;
if (c[pos] == '(')
{
pos ++;
ans = eval();
pos ++;
}
while (c[pos] >= '0' && c[pos] <= '9')
{
ans = ans * 10 + (c[pos] - '0');
pos ++;
}
return ans;
}
int main()
{
f.getline(c, NMAX - 3);
g << eval();
return 0;
}