Pagini recente » Cod sursa (job #2885589) | Cod sursa (job #2179544) | Monitorul de evaluare | Cod sursa (job #1289025) | Cod sursa (job #2281566)
#include <iostream>
#include <fstream>
#include <cstring>
#include <cctype>
#define input "evaluare.in"
#define output "evaluare.out"
#define EXP_SIZE 100005
using namespace std;
typedef long long ll;
ifstream in(input);
ofstream out(output);
char expresion[EXP_SIZE];
int expresion_size, curr;
ll Evaluare();
ll Termen();
ll Factor();
ll Evaluare()
{
ll r = Termen();
while(expresion[curr] == '+' || expresion[curr] == '-')
{
if(expresion[curr] == '+')
{
curr++;
r += Termen();
}
else if(expresion[curr] == '-')
{
curr++;
r -= Termen();
}
}
return r;
}
ll Termen()
{
ll r = Factor();
while(expresion[curr] == '*' || expresion[curr] == '/')
{
if(expresion[curr] == '*')
{
curr++;
r *= Factor();
}
else if(expresion[curr] == '/')
{
curr++;
r /= Factor();
}
}
return r;
}
ll Factor()
{
ll r = 0;
if(expresion[curr] == '(')
{
curr++;
r = Evaluare();
curr++;
}
else
{
while(expresion[curr] >= '0' && expresion[curr] <= '9')
r = r * 10 + expresion[curr] - '0', curr++;
}
return r;
}
int main()
{
in >> expresion;
expresion_size = strlen(expresion);
out << Evaluare();
return 0;
}