Pagini recente » Cod sursa (job #2639031) | Cod sursa (job #1817384) | Cod sursa (job #1214662) | Cod sursa (job #791997) | Cod sursa (job #2775012)
#include <bits/stdc++.h>
#define ll long long
#define lsb(x) x & -x
using namespace std;
//grammar
// Sum = Product +- Product +- ....
// Product = Number */ Number */ ...
// Number = Integer or (Sum)
string s;
int position;
int sum();
int product();
int numberOrSum();
int getInteger();
int main() {
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
cin >> s;
cout << sum();
return 0;
}
int sum() {
int answer = product();
while(position < s.size() && (s[position] == '+' || s[position] == '-')) {
position ++;
if(s[position - 1] == '+')
answer += product();
else if(s[position - 1] == '-')
answer -= product();
}
return answer;
}
int product() {
int answer = numberOrSum();
while(position < s.size() && (s[position] == '*' || s[position] == '/')) {
position ++;
if(s[position - 1] == '*')
answer *= numberOrSum();
else if(s[position - 1] == '/')
answer /= numberOrSum();
}
return answer;
}
int numberOrSum() {
int answer = 0;
if(s[position] == '(') {
position ++;
answer = sum();
position ++;
} else {
while(position < s.size() && '0' <= s[position] && s[position] <= '9') {
answer *= 10;
answer += (s[position] - '0');
position ++;
}
}
return answer;
}