Cod sursă (job #287105)

Utilizator avatar Oldpug Alexandru Ionescu Oldpug IP ascuns
Problemă Bizar (clasele 9-10) Compilator cpp | 0,77 kb
Rundă Arhiva de probleme Status evaluat
Dată 2 mar. 2017 10:46:44 Scor 100
//#include "stdafx.h"
#include <fstream>
#include <string>
#include <vector>

using namespace std;
ifstream in("bizar.in");
ofstream out("bizar.out");

string s, expr;
vector<int> v;
int i;

int get_num()
{
  int num = 0;

  while (isdigit(s[i]))
  {
    num = num * 10 + s[i] - '0';
    ++i;
  }

  return num;
}

int get_expr_val()
{
  int pos;
  pos = get_num();

  while (s[i] == '(')
  {
    vector<int> v;

    while (s[i] != ')')
    {
      i++;
      v.push_back(get_expr_val());
    }

    ++i;
    pos = v[(pos + v.size() - 1) % v.size()];
  }

  return pos;
}

int main()
{
  getline(in, expr);

  for (int i = 0; i < expr.size(); ++i)
    if (expr[i] != ' ')
      s.push_back(expr[i]);

  out << get_expr_val();
}