Pagini recente » Cod sursa (job #533263) | Cod sursa (job #2911047) | Cod sursa (job #1272448) | Cod sursa (job #666733) | Cod sursa (job #2964924)
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin ("evaluare.in");
ofstream cout("evaluare.out");
#define isdigit(x) (x >='0' && x <= '9')
#define toint(x) (x - '0')
char E[100010];
int Ej = 0, szE;
long inm_inp();
long termen();
long get()
{
long n = 0;
while(isdigit(E[Ej]) && Ej < szE)
{
n = n * 10 + toint(E[Ej]);
Ej++;
}
return n;
}
long adun_scad()
{
long n = inm_inp();
while(E[Ej] == '+' || E[Ej] == '-')
{
if(E[Ej++] == '+') n += inm_inp();
else n -= inm_inp();
}
return n;
}
long inm_inp()
{
long n = termen();
while(E[Ej] == '*' || E[Ej] == '/')
{
if(E[Ej++] == '*') n *= termen();
else n /= termen();
}
return n;
}
long termen()
{
if(E[Ej] != '(')
return get();
int rem;
Ej++;
rem = adun_scad();
Ej++;
return rem;
}
int main()
{
cin.getline(E, 10010);
szE = strlen(E);
cout << adun_scad();
return 0;
}