Pagini recente » Cod sursa (job #1086947) | Cod sursa (job #1442824) | Cod sursa (job #960890) | Cod sursa (job #1028832) | Cod sursa (job #2851687)
#include <bits/stdc++.h>
using namespace std;
#define NMAX 1005
#define MOD 1009
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
string expression;
int index = 0;
int element();
int factor();
int evaluate()
{
int result = element();
while (expression[index] == '+' || expression[index] == '-')
{
switch (expression[index])
{
case '+':
index++;
result += element();
break;
case '-':
index++;
result -= element();
break;
}
}
return result;
}
int element()
{
int result = factor();
while (expression[index] == '*' || expression[index] == '/')
{
switch (expression[index])
{
case '*':
index++;
result *= factor();
break;
case '/':
index++;
result /= factor();
break;
}
}
return result;
}
int factor()
{
int result = 0;
if (expression[index] == '(')
{
index++;
result = evaluate();
index++;
}
else
{
int current_number = 0;
while (isdigit(expression[index]))
{
current_number = current_number * 10 + (expression[index] - '0');
index++;
}
result = current_number;
}
return result;
}
int main()
{
fin >> expression;
fout << evaluate();
fin.close();
fout.close();
return 0;
}