Cod sursa(job #2787770)

Utilizator Teodor94Teodor Plop Teodor94 Data 23 octombrie 2021 23:49:22
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <stdio.h>

#define MAX_S 100000

char s[MAX_S];
int sIndex;

int adunare();          // Declaram semnatura functiei adunare, ca sa "stie" functia factor de existenta ei

int factor() {
  int number;

  if (s[sIndex] == '(') {
    ++sIndex;
    number = adunare();
    ++sIndex;
  } else {
    number = 0;
    while (s[sIndex] >= '0' && s[sIndex] <= '9') {
      number = number * 10 + s[sIndex] - '0';
      ++sIndex;
    }
  }

  return number;
}

int inmultire() {
  int result;

  result = factor();
  while (s[sIndex] == '*' || s[sIndex] == '/')
    if (s[sIndex++] == '*')
      result *= factor();
    else
      result /= factor();

  return result;
}

int adunare() {
  int result;

  result = inmultire();
  while (s[sIndex] == '+' || s[sIndex] == '-')
    if (s[sIndex++] == '+')
      result += inmultire();
    else
      result -= inmultire();

  return result;
}

int main() {
  FILE *fin, *fout;
  fin = fopen("evaluare.in", "r");
  fout = fopen("evaluare.out", "w");

  fgets(s, MAX_S, fin);

  sIndex = 0;
  fprintf(fout, "%d\n", adunare());

  fclose(fin);
  fclose(fout);
  return 0;
}