Во-первых, стоит отметить, что факториал uint.MaxValue
астрономически большой. Я не могу найти хорошую оценку порядка величины факторного фактора, но его битовое представление, вероятно, будет занимать высокий процент от стандартного ОЗУ, если не будет значительно превышать.
Класс BigInteger
кажется тем, что вы хотите, при условии, что вы хотите подняться примерно до 1 000 000 или около того (очень приблизительно). После этого время и память становятся очень запредельными. В текущих (стабильных) версиях .NET, до 3.5, вы должны использовать пользовательскую реализацию. Этот в CodeProject, кажется, высоко оценен. Если вам доведется заниматься разработкой для .NET 4.0, команда Microsoft наконец-то сумела включить класс BigInteger
в пространство имен System.Numerics
BCL. В отличие от некоторых реализаций BigInteger, в существующей в .NET 4.0 нет встроенного факториального метода (я не уверен насчет CodeProject), но его реализация должна быть тривиальной - метод расширения был бы неплохим способ.
Поскольку вам кажется, что вы не хотите использовать тип BigInteger, было бы полезно, если бы вы могли проверить, что это не то, что вам нужно, прочитав мой ответ, а затем точно объяснить, почему он не подходит вашим целям. .