Pagini recente » Progresii 3 | Monitorul de evaluare | sitemap.xml | Cod sursa (job #3325380) | Cod sursa (job #1100594)
#include <fstream>
#include <iostream>
#include <string.h>
using namespace std;
ifstream in ("evaluare.in");
ofstream out ("evaluare.out");
int p;
char s[100001];
int eval();
int termen();
int factor();
int nr();
int main()
{
in.get(s,100000);
out << eval() << '\n';
in.close();
out.close();
return 0;
}
int eval()
{
int r = termen();
while (s[p] == '+' || s[p] == '-')
{
if (s[p] == '+')
{
++p;
r += termen();
}
else
{
p++;
r -= termen();
}
}
return r;
}
int termen()
{
int r = factor();
while (s[p] == '*' || s[p] == '/')
{
if (s[p] == '*')
{
p++;
r*=factor();
}
else
{
p++;
r /= factor();
}
}
return r;
}
int factor()
{
int r;
if (s[p] == '(')
{
p++;
r=eval();
p++;
}
else if (s[p]<='9' && s[p]>='0')
{
r=nr();
}
return r;
}
int nr()
{
int x = 0;
while (s[p] >= '0' && s[p] <= '9')
{
x = x * 10 + (s[p] - '0');
p++;
}
return x;
}