Pagini recente » Cod sursa (job #2540002) | Cod sursa (job #2577) | Cod sursa (job #2806354) | Cod sursa (job #888309) | Cod sursa (job #1653474)
#include <algorithm>
#include <bitset>
#include <cmath>
#include <fstream>
#include <iostream>
#include <queue>
#include <stack>
#include <string.h>
#include <string>
#include <vector>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
ifstream fin ("evaluare.in");
ofstream fout ("evaluare.out");
size_t pos = 0;
string A;
ll eval();
ll termen();
ll factor();
int main() {
fin >> A;
fout << eval() << endl;
return 0;
}
ll eval() {
ll res = termen();
while(pos < A.size() && (A[pos] == '+' || A[pos] == '-')) {
if (A[pos] == '+') {
++pos;
res += termen();
} else {
++pos;
res -= termen();
}
}
//cout << "eval:\t" << pos << ":\t" << res << endl;
return res;
}
ll termen() {
ll res = factor();
while(pos < A.size() && (A[pos] == '*' || A[pos] == '/')) {
if (A[pos] == '*') {
++pos;
res *= factor();
} else {
++pos;
res /= factor();
}
}
//cout << "termen:\t" << pos << ":\t" << res << endl;
return res;
}
ll factor() {
ll res = 0;
if (A[pos] == '(') {
++pos;
res = eval();
++pos;
} else {
while (pos < A.size() && A[pos] >= '0' && A[pos] <= '9') {
res = res*10 + A[pos] - '0';
++pos;
}
}
//cout << "factor:\t" << pos << ":\t" << res << endl;
return res;
}