Требуется как-то хранить числа больше чем int64 может содержать.
Есть идея создать массив int, где первый элемент - единицы, второй - тысячи, третий - миллионы и тд. Но это вариант решения очень громоздкий и занимает много места.
Какие ещё есть варианты или как улучшить предложенный?
Лучший вариант - использовать BigInteger. Он может хранить любое, сколь угодно большое число.
Если нужно по каким-то причинам что-то самописное, изучить, как он устроен и изобрести велосипед :)
Вот описание:
https://habr.com/post/207754/
Исследовав конструкторы структуры BigInteger можно заключить: если число помещается в int диапазон, то оно хранится в переменной _sign; если число не помещается в int диапазон, то его знак хранится в переменной _sign (-1 – для отрицательного и 1 – для положительного), а массив _bits содержит коэффициенты ai разложения длинного числа с основанием 2^32.
Ваша идея правильная, с той только разницей что лучше хранить число не в десятичной системе счисления, а в системе с основанием 109 или 232 - это уменьшит потребление памяти в 9 раз.
Но если целью является не тренировка в алгоритмах длинной арифметики, а решение реальных задач - лучше использовать готовый класс BigInteger.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости