Pagini recente » Cod sursa (job #567546) | Cod sursa (job #1839384) | Cod sursa (job #124894) | Cod sursa (job #1872757) | Cod sursa (job #1864456)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
int eval();
int term();
int fact();
string s;
int p;
int eval() {
int a = term();
while(p < s.size() && (s[p] == '+' || s[p] == '-')) {
if(s[p] == '+') {
p++;
a += term();
continue;
}
if(s[p] == '-') {
p++;
a -= term();
continue;
}
}
//cout << "T2 " << a << " " << p << '\n';
return a;
}
int term() {
int a = fact();
while(p < s.size() && (s[p] == '*' || s[p] == '/')) {
if(s[p] == '*') {
p++;
a *= fact();
continue;
}
if(s[p] == '/') {
p++;
a /= fact();
continue;
}
}
//cout << "T3 " << a << " " << p << '\n';
return a;
}
int fact() {
if(s[p] == '(') {
p++;
int a = eval();
p++;
return a;
}
int a = 0;
while(s[p] >= '0' && s[p] <= '9') {
a = a*10 + (s[p] - '0');
p++;
}
//cout << p << " " << a << '\n';
return a;
}
int main() {
in >> s;
out << eval();
return 0;
}