Pagini recente » Cod sursa (job #1768548) | Cod sursa (job #2124772) | Cod sursa (job #1534189) | Rating Visan Lucian Costinel (Visan) | Cod sursa (job #1974731)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#include <cstring>
using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
const int strMax = 1e5 + 5;
char str[strMax], *p;
int eval();
int termen();
int factor();
int main() {
in>>(str+1);
str[0] = '(';
str[strlen(str)] = ')';
p = str;
out<<eval()<<'\n';
in.close();out.close();
return 0;
}
int eval() {
int ans = termen();
while (*p == '+' || *p == '-') {
switch (*p++) {
case '+': ans += termen(); break;
case '-': ans -= termen();
}
}
return ans;
}
int termen() {
int ans = factor();
while (*p == '*' || *p == '/') {
switch (*p++) {
case '*': ans *= factor(); break;
case '/': ans /= factor();
}
}
return ans;
}
int factor() {
int ans = 0;
if (*p == '(') {
++p;
ans = eval();
++p;
}
else {
while (strchr("0123456789",*p)) {
ans = ans * 10 + (*p++ - '0');
}
}
return ans;
}