Pagini recente » Cod sursa (job #661945) | Cod sursa (job #1950231) | Cod sursa (job #2724627) | Borderou de evaluare (job #1567688) | Cod sursa (job #2369034)
#include <bits/stdc++.h>
#define ll long long
#define NM 100005
using namespace std;
ifstream fin ("evaluare.in");
ofstream fout ("evaluare.out");
char s[NM], *p;
ll termen();
ll factor();
ll eval()
{
ll r = termen();
while(*p == '+' || *p == '-')
{
if(*p == '+')
{
++p;
r+=termen();
}
else
{
++p;
r-=termen();
}
}
return r;
}
ll termen()
{
ll r = factor();
while(*p == '*' || *p == '/')
{
if(*p == '*')
{
++p;
r*=factor();
}
else
{
++p;
r/=factor();
}
}
return r;
}
ll factor()
{
ll r = 0;
if(*p == '(')
{
++p;
r = eval();
++p;
}
else while(isdigit(*p))
{
r = r*10 + *p - '0';
++p;
}
return r;
}
int main()
{
fin.getline(s, NM);
p = s;
fout << eval();
return 0;
}