Cod sursa(job #1831268)

Utilizator CalarisPredut Denis Stefanita Calaris Data 17 decembrie 2016 18:35:42
Problema Evaluarea unei expresii Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#include <string>
#include <iostream>

std::fstream f("evaluare.in",std::ios::in);
std::ofstream g("evaluare.out");

std::string st;

int index = 0;

int solve();
int tr();
int fn();


int main()
{
    int nr;
    f>>st;
    nr = solve();

    g<<nr;
    return 0;
}

int solve()
{
  int x = tr();

  while(st[index] == '+' || st[index] == '-')
    {
      if(st[index] == '+')
        {
        ++index;
        x+=tr();
        }
      if(st[index] == '-')
        {
        ++index;
        x-=tr();
        }
    }

    return x;
}

int tr()
{
  int x = fn();

  while(st[index] == '*' || st[index] == '/')
    {
      if(st[index] == '*')
        {
        ++index;
        x*=fn();
        }
      if(st[index] == '/')
        {
        ++index;
        x/=fn();
        }
    }

    return x;
}

int fn()
{
  int x = 0;
  if(st[index] =='(')
        {
        ++index;
        x = solve();
        ++index;
        }
  else
    {
    while(st[index]>='0' && st[index]<'9')
        {
        x = x*10+ int(st[index]-'0');
        ++index;
        }
    }

  return x;
}