Pagini recente » Cod sursa (job #158152) | Cod sursa (job #2747029) | Cod sursa (job #2936) | Cod sursa (job #1784517) | Cod sursa (job #2328403)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
const int NMAX = 100005;
char s[NMAX];
int n, p;
int expresie(), termen(), factor();
/**
E : T + T sau T - T sau T
T : F * F sau F / F sau F
E : (E) sau un numar
*/
int expresie()
{
int x = termen();
while (s[p] == '+' || s[p] == '-')
{
++p;
if (s[p - 1] == '+')
x += termen();
else
x -= termen();
}
return x;
}
int termen()
{
int x = factor();
while (s[p] == '*' || s[p] == '/')
{
++p;
if (s[p - 1] == '*')
x *= factor();
else
x /= factor();
}
return x;
}
int factor()
{
int x = 0;
if (s[p] == '(')
{
++p;
x = expresie();
++p;
}
else
{
while (p <= n && ('0' <= s[p] && s[p] <= '9'))
{
x = x * 10 + (s[p] - '0');
++p;
}
}
return x;
}
int main()
{
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
fin >> (s + 1);
n = strlen(s + 1);
p = 1;
fout << expresie() << "\n";
fin.close();
fout.close();
return 0;
}