Pagini recente » Cod sursa (job #711015) | Cod sursa (job #1155708) | Cod sursa (job #1835003) | Cod sursa (job #636807) | Cod sursa (job #2453730)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char x[100001];
int i, lg;
int factor();
int produs();
int suma();
int factor()
{
int r;
if (x[i] == '(')
{
i++; //sar peste paranteza
r = suma();
i++; //sar peste ')'
}
else
{
//avem un numar
r = 0;
while (i<lg && isdigit(x[i]))
{
r = r*10 + x[i] - 48;
i++;
}
//acum x[i] nu e cifra
}
return r;
}
int produs()
{
int p = factor(), op;
//op = 0 pentru inmultire, 1 pentru impartire
while (i<lg && (x[i] == '*' || x[i] == '/'))
{
if (x[i] == '*')
op = 0;
else
op = 1;
i++;
if (op == 0)
p = p * factor();
else
p = p / factor();
}
return p;
}
int suma()
{
int r = produs(), op;
//op = 0 adunare, 1 scadere
while (i<lg && (x[i] == '+' || x[i] == '-'))
{
if (x[i] == '+') op = 0;
else op = 1;
i++;
if (op == 0) r = r + produs();
else r = r - produs();
}
return r;
}
int main()
{
fin >> x;
lg = strlen(x);
fout << suma();
return 0;
}