Cod sursa(job #2842099)

Utilizator gege42oTimus George gege42o Data 31 ianuarie 2022 09:24:29
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb

#include <fstream>
#include <cctype>

using namespace std;

ifstream cin("evaluare.in");
ofstream cout("evaluare.out");

const int N = 1e5+1;
char a[N];
int p;

int expresie();
int termen();
int factor();

int expresie()
{
  int sum = termen();
  while (a[p] == '+' || a[p] == '-')
  {
    if (a[p] == '+')
    {
      p++;
      sum += termen();
    }
    else
    {
      p++;
      sum -= termen();
    }
  }
  return sum;
}

int termen()
{
  int prod = factor();
  while (a[p] == '*' || a[p] == '/')
  {
    if (a[p] == '*')
    {
      p++;
      prod *= factor();
    }
    else
    {
      p++;
      prod /= factor();
    }
  }
  return prod;
}

int factor()
{
  int val = 0, semn = 1;
  while (a[p] == '-')
  {
    p++;
    semn = -semn;
  }
  if (a[p] == '(')
  {
    p++; //trece peste
    val = expresie();
    p++;
    return semn * val;
  }
  while (isdigit(a[p]))
  {
    val = val * 10 + (a[p] - '0');
    p++;
  }
  return semn * val;
}

int main()
{
  cin >> a;
  cout << expresie();
  return 0;
}