Cod sursa(job #2790763)

Utilizator Antonia_onisoruantonia onisoru Antonia_onisoru Data 29 octombrie 2021 14:46:50
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.37 kb
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

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

string s;
int size_s;

int adunare();

int factor(){
  int number;

  number = 0;
  if( s[size_s] == '(' ){
    size_s++;
    number = adunare();
    size_s++;
  }
  else{

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

  }

  //out<<"numar: "<<number<<'\n';
  return number;
}

int inmultire(){
  int rezultat;

  rezultat = factor();
  while( s[size_s] == '*' || s[size_s] == '/' ){

    //out<<s[size_s]<<'\n';

    if( s[size_s] == '*' ){
      size_s++;
      rezultat *= factor();
    }

    if( s[size_s] == '/' ){
      size_s++;
      rezultat /= factor();
    }

  }

  //out<<"inmultire: "<<rezultat<<'\n';
  return rezultat;
}

int adunare(){
  int rezultat;

  rezultat = inmultire();

  //out<<"rezultat: "<<rezultat<<'\n';

  while( s[size_s] == '+' || s[size_s] == '-' ){

    if( s[size_s] == '+' ){
      size_s++;
      rezultat += inmultire();
    }

    if(s[size_s] == '-' ){
      size_s++;
      rezultat -= inmultire();
    }

  }

  //out<<"adunare: "<<rezultat<<'\n';
  return rezultat;
}



int main()
{
    in>>s;
    size_s = 0;
    out<<adunare();
    return 0;
}