Cod sursa(job #1995580)

Utilizator ruxandramateiMatei Ruxandra ruxandramatei Data 28 iunie 2017 15:33:19
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <iostream>
#include <fstream>
#include <string.h>

using namespace std;

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

char expr[100001], * item ;
int lgExpr;

void citire(){
  in >> expr;
  lgExpr = strlen(expr) - 1;
}

long factor();
long termen();

long rezolvare(){
  long solutie = termen();
  while(* item == '-' || * item == '+'){
    if(* item == '-'){
      item++;
      solutie -= termen();
    }
    else if(* item == '+'){
      item++;
      solutie += termen();
    }
  }
  return solutie;
}

long termen(){
  long factorCal = factor();
  while(* item == '*' || * item == '/'){
    if(* item == '/'){
      item++;
      factorCal /= factor();
    }
    else if(* item == '*'){
      item++;
      factorCal *= factor();
    }
  }
  return factorCal;
}

long factor(){
    long calcul = 0;
    if(* item == '('){
      item++;
      calcul = rezolvare();//o subexpresie, ...(....)...
      item++;
    }
    else{
      while(* item >= '0' && * item <= '9'){
         calcul = calcul * 10 + (* item -'0');
         item++;
      }
    }
    return calcul;
}

int main(){
  citire();
  item = expr;
  out << rezolvare();
  return 0;
}