Другая альтернатива, которая не использует рекурсию и использует стек, который избегает перераспределения при каждой вставке (по крайней мере, для первых 32 цифр):
var list = new Stack<int>(32);
var remainder = 123456;
do
{
list.Push(remainder % 10);
remainder /= 10;
} while (remainder != 0);
return list.ToArray();
И да, этот метод также работает для 0 и отрицательных чисел.
Интересно, дайте этому алгоритму отрицательное число -123456, и вы получите {-1, -2, -3, -4, -5, -6}
Обновление : переключено с использования List на Stack, поскольку это автоматически дает правильный порядок.