J'essaie de calculer 2 ^ 1000 (2 à la puissance de 1000) en utilisant c #. J'ai besoin de la valeur à tous les endroits. J'ai gratté ma tête pendant un moment maintenant parce que je ne peux pas sembler trouver un moyen d'y parvenir en C #. P>
Y a-t-il une sorte de type qui stockera un nombre de 300 chiffres plus de 300 chiffres que je manque? :) p>
merci p>
10 Réponses :
Oui, mais seulement dans .NET 4.0 - system.numerics.biginteger code>
. p>
Si vous pouvez utiliser .NET 4.0, j'irais pour ça. Sinon, je suis sûr qu'il existe des bibliothèques tiers. Faites-moi savoir si vous voulez que je tente de trouver certains. P>
Je vais voir s'il est possible d'utiliser .NET 4.0. Aurait beaucoup plutôt qu'une bibliothèque. Si c'est assez facile?
On dirait que beaucoup d'autres personnes ont publié des liens vers des bibliothèques maintenant :)
Ils ont attendu que la version 4.0 du cadre inclue cela ??? En Java, il est là depuis JDK1.1 XD
Il a été tiré de 3,5 à la dernière minute.
système.numerics.biginteger Si vous êtes dans .NET 4.0 (vs 2010) P>
ou cherchez un bon BIGINT Mise en œuvre sur le Web - il y en a beaucoup à choisir parmi. p>
Voir aussi Cette question Stackoverflow . p>
Vous pouvez utiliser un tableau pour stocker vos chiffres. C'est en désordre, je sais, mais vous devrez essentiellement programmer la multiplication comme vous le feriez à la main, sauf dans votre code. P>
Il y a une classe ici appelée Bigint P>
Très utile pour ce type de problème sans .NET 4.0 P>
Vous pouvez simplement utiliser F # pour tester le faire, comme cela fonctionnera dans VS2008, mais pour une application de production, ce serait un problème. P>
Regardez le problème # 25, http://blogs.msdn.com/mpeck/archive/2009/04/01/solving-problems-in-c-and-f-part-2.aspx , comme cela montrera une approche que vous pourrez peut-être utiliser. P>
Votre application C # peut appeler une classe F #, ils travaillent ensemble. P>
Eh ..., 2 ^ 0 est le 1er bit, 2 ^ 1 est le 2ème bit, ..., 2 ^ 4 est 5ème peu .... Vous avez besoin de 1000 bits pour cela. Je ne sais rien à propos de C #, cependant, pourquoi ne pas me rappeler que la notation des bits est un 999 0 avec un 1? Et utilisez-le en conséquence. P>
Que prévoyez-vous d'utiliser ce numéro? P>
Si vous pouvez utiliser ironRuby (pas sûr de la manière dont il est utilisable pour le moment), il a une conversion implicite à Bignum. Exemple: p>
2 ** 1000 code> donne:
107150860718626732094842504906000181056140 ... CODE> P>
Haha Stackoverflow, laissez simplement le numéro passer de la page. Au moins, c'est à quoi ressemble à mon navigateur (FF 3.5)
Ouais, désolé pour ça. Va tronquer.
Vous pouvez ajouter une référence à l'exécution Java (c: \ windows \ microsoft.net \ framework \ v2.0.50727 \ vjslib.dll est ce que j'ai) et à l'aide de java.Math code> , vous obtenez un
biginteger code> p>
Maintenant, il a deux problèmes, résolvez le problème et intégrez deux cadres.
Vous n'avez pas vraiment à gérer une grande partie de la Java, c'est juste une classe. Cela fonctionne aussi bien que toutes les autres classes de BigInteger.
Si votre objectif est d'exercer vos compétences C # sur des problèmes d'Euler, l'utilisation d'une bibliothèque de Bigint semble inutile. Si vous avez juste besoin de la valeur de 2 ^ 1000 comme étape pour résoudre un autre problème, c'est bien ici.
10715086071862673209484250490600018105614048117055 33607443750388370351051124936122493198378815695858 12759467291755314682518714528569231404359845775746 98574803934567774824230985421074605062371141877954 18215304647498358194126739876755916554394607706291 4571196477686542167660429831652624386837205668069376
Je sais que cette question est assez ancienne mais elle est toujours trouvée par Google. J'ai eu le même problème, je cherchais une bibliothèque à calculer avec d'énormes numéros (ou de petits) qui ne peuvent pas être représentés par des types de données standard. P>
J'ai donc créé un nouveau type de données appelé Il suffit de regarder à https://github.com/anakonda3000/hypermath/ p> EDECIMAL code>. Avec ce type de données, vous pouvez calculer avec des numéros de taille et de précision arbitraires. Peu importe que le nombre ait 10 chiffres ou 1000000. P>
Travaillez-vous sur des problèmes d'Euler? Le coup est peut-être que vous n'avez pas besoin de l'ensemble du vaule de 2 ^ 1000. Il suffit d'enregistrer ce qui est utile. (Par exemple, les 20 numéros inférieurs)
@pierr, oui c'était pour un problème d'Euler réellement! J'ai besoin de tous les chiffres de ce problème, cependant.
Je n'ai pas travaillé à travers une grande partie du projet Euler, mais d'après ce que j'ai vu, il semble demander de grandes tâches comme celle-ci exprès, vous devez donc trouver un raccourci pour la solution. Mais oui, toute bibliothèque "de précision arbitraire" et / ou "Big Enge" devrait gérer cela pour vous.
@Mike: Comment savez-vous que vous avez besoin de tous les chiffres?
Qu'en est-il des doubles? C'est exactement ce que je cherche.