Pagini recente » Cod sursa (job #1346762) | Cod sursa (job #639349) | Cod sursa (job #1287167) | Cod sursa (job #1751190) | Cod sursa (job #2192762)
#include<iostream>
#include<string>
using namespace std;
long long term(const string &s, int &idx);
long long factor(const string &s, int &idx);
long long eval(const string &s, int &idx) {
long long ans = term(s, idx);
while (s[idx] == '+' || s[idx] == '-') {
if (s[idx] == '+') { idx++; ans += term(s, idx); }
if (s[idx] == '-') { idx++; ans -= term(s, idx); }
}
return ans;
}
long long term(const string &s, int &idx) {
long long ans = factor(s, idx);
while (s[idx] == '*' || s[idx] == '/') {
if (s[idx] == '*') { idx++; ans *= factor(s, idx); }
if (s[idx] == '/') { idx++; ans /= factor(s, idx); }
}
return ans;
}
long long factor(const string &s, int &idx) {
long long ans = 0;
if (s[idx] == '(') {
idx++; ans = eval(s, idx); idx++;
} else {
while (idx < s.size() && '0' <= s[idx] && s[idx] <= '9') {
ans = ans * 10 + s[idx] - '0';
idx++;
}
}
return ans;
}
int main () {
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
string s;
int idx = 0;
cin >> s;
cout << eval(s, idx);
return 0;
}