Pagini recente » Cod sursa (job #2488642) | Cod sursa (job #2921898) | Cod sursa (job #1775153) | Cod sursa (job #2294544) | Cod sursa (job #2229045)
//ALEX ENACHE
//#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <map>
#include <set>
#include <unordered_map>
#include <time.h>
#include <iomanip>
#include <deque>
#include <math.h>
#include <cmath>
#include <assert.h>
#include <stack>
using namespace std;
#include <fstream>
ifstream cin ("evaluare.in");
ofstream cout ("evaluare.out");
int conv[300];
vector <int> v;
int pnt = 0;
int rez(){
vector <int> now;
while (pnt < v.size() && v[pnt] != conv[')']){
if (v[pnt] == conv['(']){
pnt++;
now.push_back(rez());
}
else{
now.push_back(v[pnt]);
}
pnt++;
}
vector <int> after;
for (int i=0; i<now.size(); i++){
if (now[i] <= 1e9){
int nr = now[i];
while (i+1 < now.size() && (now[i+1] == conv['/'] || now[i+1] == conv['*'])){
if (now[i+1] == conv['/']){
nr /= now[i+2];
}
else{
nr *= now[i+2];
}
i+=2;
}
after.push_back(nr);
}
else{
after.push_back(now[i]);
}
}
int nr = after[0];
for (int i=1; i<after.size(); i+=2){
if (after[i] == conv['+']){
nr += after[i+1];
}
else{
nr -= after[i+1];
}
}
return nr;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
//freopen("input", "r", stdin);
//freopen("output", "w", stdout);
string s;
cin>>s;
conv['+'] = 1e9+1;
conv['-'] = 1e9+2;
conv['/'] = 1e9+3;
conv['*'] = 1e9+4;
conv['('] = 1e9+5;
conv[')'] = 1e9+6;
for (int i=0; i<s.size(); i++){
if (s[i] >= '0' && s[i] <= '9'){
int nr = 0;
while (i < s.size() && s[i] >= '0' && s[i] <= '9'){
nr *= 10;
nr += s[i]-'0';
i++;
}
v.push_back(nr);
}
if (i < s.size()){
v.push_back(conv[s[i]]);
}
}
/*for (auto &x : v){
cout<<x<<" ";
}*/
cout<<rez();
return 0;
}