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
5 Réponses :
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. P>
une version était en fait Coupée de la BCL . P>
La bibliothèque J # a une implémentation de java.math.biginteger que vous pouvez utiliser depuis n'importe quelle langue. P>
alternativement em>, 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. P>
jusqu'à ce que vous puissiez utiliser System.numerics.biginteger Code>
Vous allez être bloqué à l'aide d'une implémentation non-Microsoft comme BigInteger code> sur le projet de code
. P>
sonne comme le projet Euler. P>
.NET 4.0 a système.numerics.biginteger, ou vous pouvez prendre une jolie implémentation douce ici:
C # BigInteger Class P>
EDIT: TREED: ( P>
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. P>
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
Decimal gérera 0 à +/- 79,228,162 514,264,337 593 543 950,335 sans point décimal (échelle de zéro) p>
La valeur était trop grande ou trop petite pour une décimale.
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. P>
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!