Pagini recente » Cod sursa (job #1394862) | Cod sursa (job #1856678) | Cod sursa (job #1129873) | Cod sursa (job #645430) | Cod sursa (job #3215692)
#include <iostream>
#include <cstring>
using namespace std;
int i;
char c[100005];
int eval();
int factor();
int termen();
int main()
{
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
cin.tie(nullptr)->sync_with_stdio(0);
cin >> c;
cout << eval();
return 0;
}
int eval() {
int r = termen();
while(c[i] == '+' || c[i] == '-') {
if(c[i] == '+') {
i++;
r += termen();
}
else {
i++;
r -= termen();
}
}
return r;
}
int termen() {
int r = factor();
while(c[i] == '*' || c[i] == '/') {
if(c[i] == '*') {
i++;
r *= factor();
}
else {
i++;
r /= factor();
}
}
return r;
}
int factor() {
int r = 0;
if(c[i] == '(') {
i++;
r = eval();
i++;
}
else {
int coef = 1;
if(c[i] == '-') {
coef = -1;
i++;
}
while(isdigit(c[i])) {
r = r * 10 + c[i] - '0';
i++;
}
r *= coef;
}
return r;
}