Итак, по совету из комментариев господина Павла безумного ученого, пытаюсь сделать алгоритм перебора: "перебор "уникальных" комбинаций можно осуществить с помощью массива long[], длинной в N ячеек. Сначала заполняем все ячейки числом 9. Затем проводится уменьшение на 1 значения в [0] элементе массива до тех пор, пока это значение не достигнет 0. Тогда уменьшается значение элемента с индексом [1], а все предыдущие элементы также получают это новое значение. Пример: [0, 9, 9] становится [8, 8, 9]. После этого массив снова декрементируется по описанной выше схеме, начиная с [0] элемента." На сколько я понимаю, этот алгоритм можно осуществить лишь с помощью рекурсии, но пока вообще не понятно, как.. На данный момент получился недоалгоритм, который не в состоянии правильно декрементировать элементы массива после [2]. С быстрым поднесением в степень без Math.pow() разобрался, так же в комментариях нашел классный алгоритм определения длинны числа.. P.S.: принтов наставил чтоб было понятно, как этот алгоритм работает)