Cod sursa(job #2947614)

Utilizator MemeComan Mihai Matei Meme Data 26 noiembrie 2022 14:23:47
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <bits/stdc++.h>

using namespace std;
const int N = 1e5;
char s[N];
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 val = 0, semn = 1;
  while(s[p] == '-'){
    semn = - semn;
    p++;
  }

  if(s[p] == '('){
    p++;
    val = expresie();
    p++;
    return semn * val;
  }

  while( '0' <= s[p] && s[p] <= '9')
    val = val * 10 + (s[p++] - '0');
  return semn * val;
}
int main()
{
    ifstream in("evaluare.in");
    ofstream out("evaluare.out");
    in >> s;
    cout << s;
    out << expresie();
    return 0;
}