7
votes

Une valeur plus grande que Ulong? Computing 100!

J'essaie de calculer 100! Et il ne semble pas y avoir une fonction factorielle intégrée. Donc, j'ai écrit:

Protected Sub ComputeFactorial(ByVal n As ULong)
        Dim factorial As ULong = 1
        Dim i As Integer
        For i = 1 To n
            factorial = factorial * i
        Next
        lblAnswer.Text = factorial
    End Sub


4 commentaires

Pourquoi ne saisissez-vous pas l'occasion et écrivez vous-même une classe vous-même? C'est un peu plus dans l'esprit du projet Euler ... :)


Pour le record: 100! ~ = 9.33262154 × 10 ^ 157


@Guffa si je savais seulement où commencer, hahah


Ce n'est pas réellement tout ce difficile à mettre en œuvre une classe de Bigint. Vous pouvez même implémenter la multiplication par addition répétée, si tout ce dont vous avez besoin est 100!


5 Réponses :


0
votes

Vous avez besoin d'une implémentation de "Bignums". Ce sont des entiers qui allouent de manière dynamique la mémoire afin qu'elles puissent contenir leur valeur.

une version était en fait Coupée de la BCL .

La bibliothèque J # a une implémentation de java.math.biginteger que vous pouvez utiliser depuis n'importe quelle langue.

alternativement , si la précision / précision n'est pas une préoccupation (vous ne vous souciez que de l'ordre de grandeur), vous pouvez simplement utiliser des flotteurs 64 bits.


0 commentaires

1
votes

jusqu'à ce que vous puissiez utiliser System.numerics.biginteger Vous allez être bloqué à l'aide d'une implémentation non-Microsoft comme BigInteger sur le projet de code .


0 commentaires

8
votes

sonne comme le projet Euler.

.NET 4.0 a système.numerics.biginteger, ou vous pouvez prendre une jolie implémentation douce ici:
C # BigInteger Class

EDIT: TREED: (

Je vais ajouter - la version de CodeProject possède des fonctionnalités supplémentaires telles que la racine d'integer carré, un test de primalité, la génération de séquence Lucas. En outre, vous n'avez pas accès direct au tampon dans la mise en œuvre .NET qui était agaçante pour quelques choses que j'essayais.


2 commentaires

En effet, projet Euler! Je suppose que je vais devoir aller avec l'une de ces autres classes. Assez malheureux!


Ne soyez pas contrarié - j'utilisais celui de CodeProject lorsque je pose quelque 80 problèmes en 7 jours. Je me suis arrêté peu de temps après - Ajouter stupide. : o



0
votes

Decimal gérera 0 à +/- 79,228,162 514,264,337 593 543 950,335 sans point décimal (échelle de zéro)


1 commentaires

La valeur était trop grande ou trop petite pour une décimale.



1
votes

Astuce: utilisez un tableau pour stocker les chiffres du nombre. Vous pouvez dire par inspection que le résultat n'aura pas plus de 200 chiffres.


0 commentaires