Cod sursa(job #1812459)

Utilizator MatteusTanase Matei Matteus Data 22 noiembrie 2016 09:32:49
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#include <iostream>
#include <cstring>
#include <ctype.h>
using namespace std;

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

const int N=100001;
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 semn=1, val=0;
  while(s[p]=='-')
  {
    p++;
    semn=-semn;
  }
  if(s[p]=='(')
  {
    p++;
    val=expresie ();
    p++;
    return semn*val;
  }
  while (isdigit (s[p]))
  {
    val=val*10+(s[p]-'0');
    p++;
  }
  return semn*val;
}

int main()
{
    int rasp;
    in.get(s, N);
    rasp = expresie ();
    out<<rasp;
    return 0;
}