Pagini recente » Cod sursa (job #177131) | Cod sursa (job #794909) | Cod sursa (job #982053) | Cod sursa (job #207753) | Cod sursa (job #2870725)
#include <fstream>
#define NMAX 100005
using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
char s[NMAX];
int i;
bool isdigit(char x)
{
return x >= '0' && x <= '9';
}
int adunare();
int inmultire();
int factor();
int factor()
{
int nr;
if (isdigit(s[i]))
{
nr = 0;
while (isdigit(s[i]))
{
nr = nr * 10 + s[i] - '0';
++i;
}
}
else if (s[i] == '(')
{
++i;
nr = adunare();
++i;
}
return nr;
}
int inmultire()
{
int nr = factor();
while (s[i] == '*' || s[i] == '/')
{
if (s[i] == '*')
{
++i;
nr = nr * factor();
}
else if (s[i] == '/')
{
++i;
nr = nr / factor();
}
}
return nr;
}
int adunare()
{
int nr = inmultire();
while (s[i] == '+' || s[i] == '-')
{
if (s[i] == '+')
{
++i;
nr = nr + inmultire();
}
else if (s[i] == '-')
{
++i;
nr = nr - inmultire();
}
}
return nr;
}
int main()
{
i = 0;
in.getline(s, NMAX);
out << adunare();
return 0;
}