Pagini recente » Cod sursa (job #1072391) | Cod sursa (job #1449081) | Cod sursa (job #1487074) | Cod sursa (job #872431) | Cod sursa (job #2875067)
#include <fstream>
using namespace std;
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
string s;
int p;
long long eval();
long long termen();
long long factor();
long long eval(){
long long ans = termen(); // luam valoarea primului termen
while(s[p] == '+' || s[p] == '-'){
if(s[p] == '+'){
p++; // trecem de '+'
ans += termen();
}else{
p++; // trecem de '-'
ans -= termen();
}
}
return ans;
}
long long termen(){
long long ans = factor(); // luam valoarea primului factor
while(s[p] == '*' || s[p] == '/'){
if(s[p] == '*'){
p++; // trecem de '*'
ans *= factor();
}else{
p++;
ans /= factor();
}
}
return ans;
}
long long factor(){
long long x = 0;
if(s[p] == '('){
p++; // trecem de '('
x = eval(); // evaluam subexpresia
p++; // trecem de ')'
return x;
}
while(s[p] >= '0' && s[p] <= '9')
x = x * 10 + (s[p] - 48), p++;
return x;
}
int main(){
cin >> s;
cout << eval();
return 0;
}