Pagini recente » Cod sursa (job #540796) | Cod sursa (job #1304358) | Cod sursa (job #2101704) | Cod sursa (job #1499225) | Cod sursa (job #1974393)
#include <iostream>
#include <fstream>
#include <cstring>
#include <stack>
using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
#define ll long long
const int strMax = 1e5 + 5;
int N;
char str[strMax];
int eval(int&);
int termen(int&);
int factor(int&);
int main() {
in>>str;
int i = 0, ans = eval(i);
out<<ans<<'\n';
in.close();out.close();
return 0;
}
int eval(int& i) {
int ans = termen(i);
while (str[i] == '+' || str[i] == '-') {
switch (str[i]) {
case '+':
ans += termen(++i);
break;
case '-':
ans -= termen(++i);
}
}
return ans;
}
int termen(int& i) {
int ans = factor(i);
while (str[i] == '*' || str[i] == '/') {
switch (str[i]) {
case '*':
ans *= factor(++i);
break;
case '/':
ans /= factor(++i);
}
}
return ans;
}
int factor(int& i) {
int ans;
if (str[i] == '(') {
ans = eval(++i);
++i;
}
else {
ans = 0;
while ('0' <= str[i] && str[i] <= '9') {
ans = ans * 10 + (str[i]-'0');
++i;
}
}
return ans;
}