Cod sursă (job #145102)

Utilizator avatar AndreiRS Andrei-Rares Statescu AndreiRS IP ascuns
Problemă Bizar (clasele 9-10) Compilator cpp | 1,25 kb
Rundă Arhiva de probleme Status evaluat
Dată 5 mai 2015 20:36:27 Scor 0
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

ifstream fi("bizar.in");
ofstream fo("bizar.out");

int eroare;
char first, item;

int parseNumber() {
    while (first == ' ')
        first = fi.get();

    if ( !(first >= '0' && first <= '9') )
        eroare = 1;

    int number = 0;
    while (first >= '0' && first <= '9') {
        number = number * 10 + first - '0';
        first = fi.get();
    }
    return number;
}

char parseItem() {
    while (first == ' ')
        first = fi.get();
    char delim = first;
    first = fi.get();
    return delim;
}

int E() {
    int number = parseNumber();
    item = parseItem();

    vector<int> v;

    while (item == '(') {

        v.clear();
        while (item != ')') {
            int new_number = E();
            v.push_back(new_number);
        }

        item = parseItem();
        number = v[(number - 1) % v.size()];

        if (item == '\n')
            return number;

    }
    if (item == ',' || item == ')') {
        return number;
    }
    eroare = 1;
    return 0;
}

int main()
{
    first = fi.get();
    printf("%d", E());
    if (eroare == 1)
        printf("\nerror!!\n\n\n");
    return 0;
}