Pagini recente » Cod sursa (job #1026954) | Cod sursa (job #1047018) | Cod sursa (job #169183) | Cod sursa (job #473169) | Cod sursa (job #2667248)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
typedef long long ll;
string ex;
int idx, len;
ll eval();
ll termen();
ll factor();
ll eval(){
ll ans = termen();
while(idx < len && (ex[idx] == '+' || ex[idx] == '-')){
if(ex[idx] == '+'){
idx++;
ans += termen();
break;
} else {
idx++;
ans -= termen();
break;
}
}
return ans;
}
ll termen(){
ll ans = factor();
while(idx < len && (ex[idx] == '*' || ex[idx] == '/')){
if(ex[idx] == '*'){
idx++;
ans *= factor();
break;
} else {
idx++;
ans /= factor();
break;
}
}
return ans;
}
ll factor(){
ll ans = 0;
while(idx < len && (ex[idx] == '(' || (ex[idx] >= '0' && ex[idx] <= '9'))){
if(ex[idx] == '('){
idx++;
ans += eval();
idx++;
} else if(ex[idx] >= '0' && ex[idx] <= '9'){
while(idx < len && ex[idx] >= '0' && ex[idx] <= '9'){
ans = ans * 10 + (ex[idx] - '0');
idx++;
}
}
}
return ans;
}
int main()
{
fin >> ex;
len = ex.length();
fout << eval();
return 0;
}