Pagini recente » Cod sursa (job #2370868) | Cod sursa (job #1710228) | Cod sursa (job #2298413) | Cod sursa (job #2057224) | Cod sursa (job #3302258)
#include <fstream>
#include <string>
using namespace std;
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
string s;
int expresie(string &s, int &p);
int termen(string &s, int &p);
int factor(string &s, int &p);
int numar(string &s, int &p);
int expresie(string &s, int &p) {
int rez = termen(s, p);
while (p < s.size() && (s[p] == '+' || s[p] == '-')) {
int sign = s[p] == '+' ? 1 : -1;
++p;
rez += sign * termen(s, p);
}
return rez;
}
int termen(string &s, int &p) {
int rez = factor(s, p);
while (p < s.size() && (s[p] == '*' || s[p] == '/')) {
++p;
rez = s[p - 1] == '*' ? rez * factor(s, p) : rez / factor(s, p);
}
return rez;
}
int factor(string &s, int &p) {
if (s[p] == '(') {
++p;
int rez = expresie(s, p);
++p;
return rez;
}
return numar(s, p);
}
int numar(string &s, int &p) {
int n = 0;
while (s[p] - '0' >= 0 && s[p] - '0' <= 9) {
n = n * 10 + (s[p] - '0');
++p;
}
return n;
}
int main() {
cin >> s;
int p = 0;
cout << expresie(s, p);
return 0;
}