Загрузка данных


#include <iostream>
#include <string>
#include <cmath>

int main() {
    int n;
    // Считываем количество переменных
    if (!(std::cin >> n)) {
        std::cout << "Error! Invalid vector." << std::endl;
        return 0;
    }

    std::string vector;
    // Считываем вектор значений функции
    std::cin >> vector;

    // Вычисляем необходимую длину вектора: 2^n
    // Используем битовый сдвиг (1 << n) для эффективного возведения 2 в степень n
    size_t required_length = 1ULL << n;

    // Проверяем, совпадает ли длина введенной строки с 2^n
    if (vector.length() != required_length) {
        std::cout << "Error! Invalid vector." << std::endl;
        return 0;
    }

    // Проверяем, что строка содержит только символы '0' и '1'
    for (char c : vector) {
        if (c != '0' && c != '1') {
            std::cout << "Error! Invalid vector." << std::endl;
            return 0;
        }
    }

    // Переводим двоичную строку в десятичное число
    // stoull автоматически переводит строку из заданной системы счисления (base 2)
    // и возвращает значение типа unsigned long long
    unsigned long long index = std::stoull(vector, nullptr, 2);

    // Выводим результат
    std::cout << index << std::endl;

    return 0;
}