Pagini recente » Cod sursa (job #3281562) | Cod sursa (job #1934782) | Cod sursa (job #2360458) | Cod sursa (job #2926326) | Cod sursa (job #3196172)
// Varianta rec indirecta
#include <bits/stdc++.h>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
/*
* Ranking operatii:
* 1. + sau -
* 2. * sau /
* 3. Constante
*/
int gIndex;
string ec;
long long op1();
long long op2();
long long op3();
long long numar() {
long long ret = ec[gIndex] - '0';
gIndex++;
while (ec[gIndex] >= '0' && ec[gIndex] <= '9') {
ret *= 10;
ret += ec[gIndex] - '0';
gIndex++;
}
return ret;
}
long long op1() {
long long ret = op2();
while (ec[gIndex] == '+' || ec[gIndex] == '-') {
if (ec[gIndex] == '+') {
gIndex++;
ret += op2();
} else {
gIndex++;
ret -= op2();
}
}
return ret;
}
long long op2() {
long long ret = op3();
while (ec[gIndex] == '*' || ec[gIndex] == '/') {
if (ec[gIndex] == '*') {
gIndex++;
ret *= op3();
} else {
gIndex++;
ret /= op3();
}
}
return ret;
}
long long op3() {
long long ret;
if (ec[gIndex] == '(') {
gIndex++;
ret = op1();
gIndex++;
} else {
ret = numar();
}
return ret;
}
int main() {
fin >> ec;
fout << op1();
return 0;
}