Cod sursa(job #2618440)

Utilizator vlad.ulmeanu30Ulmeanu Vlad vlad.ulmeanu30 Data 24 mai 2020 21:41:09
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.78 kb
#include <bits/stdc++.h>
#define ll long long
#define pii pair<int,int>
#define pll pair<ll,ll>
#define pli pair<ll,int>
#define pil pair<int,ll>
#define fi first
#define se second
#define inf (INT_MAX/2-1)
#define infl (1LL<<60)
#define vi vector<int>
#define vl vector<ll>
#define pb push_back
#define sz(a) (int)(a).size()
#define all(a) begin(a),end(a)
#define y0 y5656
#define y1 y7878
#define y2 y9090
#define aaa system("pause");
#define dbg(x) cerr<<(#x)<<": "<<(x)<<'\n',aaa
#define dbga(x,n) cerr<<(#x)<<"[]: ";for(int _=0;_<n;_++)cerr<<x[_]<<' ';cerr<<'\n',aaa
#define dbgs(x) cerr<<(#x)<<"[stl]: ";for(auto _:x)cerr<<_<<' ';cerr<<'\n',aaa
#define dbgp(x) cerr<<(#x)<<": "<<x.fi<<' '<<x.se<<'\n',aaa

using namespace std;

ifstream fin ("evaluare.in");
ofstream fout ("evaluare.out");

char last;
int paranteza();
int inmultire();
int adunare();

int getint () {
  int ans = 0;
  while (isdigit(last)) {
    ans = (ans * 10 + last - '0');
    fin.get(last);
  }
  return ans;
}

int paranteza () { ///(?) sau intreg
  int ans;
  if (last == '(') {
    fin.get(last);
    ans = adunare();
    fin.get(last);
  } else ans = getint();
  return ans;
}

int inmultire () {
  int ans = paranteza();
  while (last == '*' || last == '/') {
    if (last == '*') {
      fin.get(last);
      ans *= paranteza();
    }
    else {
      fin.get(last);
      ans /= paranteza();
    }
  }
  return ans;
}

int adunare () {
  int ans = inmultire();
  while (last == '+' || last == '-') {
    if (last == '+') {
      fin.get(last);
      ans += inmultire();
    } else {
      fin.get(last);
      ans -= inmultire();
    }
  }
  return ans;
}

int main () {
  fin.get(last);
  fout << adunare();
  fin.close(); fout.close();
  return 0;
}