Cod sursa(job #2703569)

Utilizator davidenko22Stancu David-Andrei davidenko22 Data 8 februarie 2021 19:32:34
Problema Evaluarea unei expresii Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>

using namespace std;

const int N = 100000;

char s[N + 1];
int p;

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

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

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

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