Потому что массив не подходит для решения такой задачи, его размер однозначно задаётся при написании программы. Нужно ограничивать максимальный размер вводимого числа, чтобы результат уместился в массиве.
Ну тогда можно устроить некую композицию из массивов. Даже в языке, где поддерживаются только статические массивы, но есть ещё и доступ к динамической памяти (а как вообще можно без него?). Берём один достаточно большой массив и храним в нём с начала до некоторого индекса адреса уже созданных нами массивов фиксированной большой длины. Индексирование, хоть и немного сложнее,ч ем с одним массивом, но тоже выполняется; произвольный доступ, т. е., имеем. Если не хватает массивов, создаём новый и помещаем его адрес в соответствующее место массива-«оглавления». И всякие вариации в том же духе. В языке же с динамическими массивами (кстати, то ли вы не сказали, на чём пишете, то ли проглядел) такие возможны размера более гигабайта, чего должно хватить. При больших размерах лучше уж использовать файл, откуда и куда грузить большие временные куски работы. Кстати,
Я хотел придумать алгоритм, работающий с входными числами любого размера. Вполне возможно, что задача решается разными способами, что мой не оптимальный, что я изобрёл велосипед и т.п.
алгоритм не путайте с программой. На программу всё равно будут наложены системные всякие ограничения, так что для чисел любой длины вам придётся извращаться с временными файлами и, далее, если не хватит места на локальном диске, с сетью (а вдруг её нет!). Кстати, по существу: бинарную маску можно сделать любой длины, не забывайте о массивах, см. чуть выше. Алгоритм поиска сочетаний тоже никак не завязан на конкретных размерах чисел. Так что совет
Circiterа очень даже подходит.