Cod sursa(job #2923578)

Utilizator AlexandruBenescuAlexandru Benescu AlexandruBenescu Data 15 septembrie 2022 23:31:07
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.39 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");

int s_length;

int expresie(const char* s, int& p);
int termen(const char* s, int& p);
int factor(const char* s, int& p);
int numar(const char* s, int& p);

int expresie(const char* s, int& p){
  int res = termen(s, p), sign;
  while (p < s_length && (s[p] == '+' || s[p] == '-')){
    sign = (s[p] == '+' ? 1 : -1);
    p++;
    res += sign * termen(s, p);
  }
  return res;
}

int termen(const char* s, int& p){
  int res = factor(s, p), aux;
  bool mult;
  while (p < s_length && (s[p] == '*' || s[p] == '/')){
    if (s[p] == '*')
      mult = true;
    else
      mult = false;
    p++;
    aux = factor(s, p);
    if (mult)
      res *= aux;
    else
      res /= aux;
  }
  return res;
}

int factor(const char* s, int& p){
  int res;
  if (s[p] == '('){
    p++;
    res = expresie(s, p);
    p++;
  }
  else
    res = numar(s, p);
  return res;
}

int numar(const char* s, int& p){
  int res = 0, sign;
  if (s[p] == '-'){
    sign = -1;
    p++;
  }
  else
    sign = 1;
  while (p < s_length && '0' <= s[p] && s[p] <= '9'){
    res = res * 10 + s[p] - '0';
    p++;
  }
  res *= sign;
  return res;
}

int main(){
  string s;
  int p = 0;
  fin >> s;
  s_length = s.size();
  fout << expresie(s.c_str(), p) << "\n";
  return 0;
}