Cod sursa(job #1939668)

Utilizator GoogalAbabei Daniel Googal Data 25 martie 2017 22:01:33
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include <fstream>
#include <cstring>
#define linemax 100005

using namespace std;

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

int n, pointer;
char line[linemax], curchar;

int suma(int,char);
int factor(int);
int produs(int,char);

void readnextchar() {
  curchar = line[pointer];
  pointer++;
}

int suma(int answer, char op) {
  int r = produs(1,'*');
  if(op == '+')
    answer+=r;
  else
    answer-=r;

  if(curchar == '+'){
      readnextchar();
      return suma(answer, '+');
  }else if(curchar == '-'){
      readnextchar();
      return suma(answer, '-');
  }else
  return answer;
}

int factor(int result) {
  if(curchar == '(') {
    readnextchar();
    result = suma(0,'+');
    readnextchar();
    return result;
  } else if('0' <= curchar && curchar <= '9'){
    result = result * 10 + (curchar - '0');
    readnextchar();
    return factor(result);
  } else
    return result;
}

int produs(int answer, char op) {
  int r = factor(0);
  if(op == '*')
    answer *= r;
  else
    answer /= r;

  if(curchar == '*') {
    readnextchar();
    return produs(answer, '*');
  } else if(curchar == '/'){
    readnextchar();
    return produs(answer, '/');
  } else
    return answer;
}

int main() {
  fin.getline(line, linemax);
  readnextchar();
  fout<<suma(0,'+');
  return 0;
}