мой подход будет следующим:
list combine(list a, list b)
{
list c;
for ( i = 0, i < list.size(), ++i )
{
for ( j = 0, j < list.size(), ++j )
c.add( a[i] * pow(10,log_10(b[j]) + 1) + b[j] );
}
return c;
}
, а затем для задачи с n-значным числом:
list nDigit(list a, int n)
{
list out;
out = combine(a, a);
for ( i = 1, i < n, ++i )
out = combine(a, out);
return out;
}
это должно сделать магию.
Код должен быть понятен, если нет, оставьте комментарий.
Вам придется обратить внимание, если элементы списка могут быть длиннее цифры. Затем вам нужно добавить следующее в функцию объединения:
* * 1010
и, конечно, передайте функцию объединения.
В конце концов, в nDigit вы должны проверить, есть ли комбинации с длиной, меньшей n