Pagini recente » Monitorul de evaluare | Cod sursa (job #2380032) | Cod sursa (job #2380028) | Cod sursa (job #2202023) | Cod sursa (job #1831880)
#include <fstream>
#include <string>
using namespace std;
int index = 0;
string s;
int termen();
int factor();
int eval()
{
int r;
r = termen();
while((index < (int) s.size()) && (s[index] == '+' || s[index] == '-'))
{
if(s[index] == '+')
{
++index;
r += termen();
}
else if(s[index] == '-')
{
++index;
r -= termen();
}
}
return r;
}
int termen()
{
int r;
r = factor();
while((index < (int) s.size()) && (s[index] == '*' || s[index] == '/'))
{
if(s[index] == '*')
{
++index;
r *= factor();
}
else if(s[index] == '/')
{
++index;
r /= factor();
}
}
return r;
}
int factor()
{
int r;
if(s[index] == '(')
{
++index;
r = eval();
++index;
}
else
{
int nr = 0;
while((index < (int) s.size()) && s[index] >= '0' && s[index] <= '9')
{
nr = 10 * nr + (s[index] - '0');
++index;
}
r = nr;
}
return r;
}
int main()
{
ifstream in("evaluare.in");
ofstream out("evaluare.out");
in >> s;
int ans = eval();
out<<ans<<"\n";
in.close();
out.close();
}