Pagini recente » Borderou de evaluare (job #1800269) | Cod sursa (job #1261335) | Cod sursa (job #1414255) | Cod sursa (job #133011) | Cod sursa (job #1414207)
#include <fstream>
#define NMax 100010
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
int ind;
char expr[NMax];
long long fact();
long long term();
long long eval()
{
long long res = fact();
while (expr[ind] == '+' || expr[ind] == '-') {
if (expr[ind] == '+') {
ind++;
res += fact();
}
else {
ind++;
res -= fact();
}
}
return res;
}
long long fact()
{
long long res = term();
while (expr[ind] == '*' || expr[ind] == '/') {
if (expr[ind] == '*') {
ind++;
res *= term();
}
else {
ind++;
res /= term();
}
}
return res;
}
long long term()
{
long long res=0;
if (expr[ind] == '(') {
ind++;
res = eval();
ind++;
}
else {
while (expr[ind] >= '0' && expr[ind] <= '9') {
res = res * 10 + (expr[ind] - '0');
ind++;
}
}
return res;
}
int main()
{
f.getline(expr, 100010);
long long res = eval();
g << res;
return 0;
}