Вычисление очень больших целых чисел - PullRequest
6 голосов
/ 09 октября 2009

Я пытаюсь вычислить 2 ^ 1000 (2 в степени 1000), используя c #. Мне нужно значение для всех мест. Я почесал голову некоторое время, потому что я не могу найти способ достичь этого в c #.

Есть ли какой-нибудь тип, который будет хранить число более 300 цифр, который я пропускаю? :)

Спасибо

Ответы [ 10 ]

18 голосов
/ 09 октября 2009

Да, но только в .NET 4.0 - System.Numerics.BigInteger.

Если вы можете использовать .NET 4.0, я бы пошел на это. В противном случае, я уверен, что есть сторонние библиотеки вокруг. Дайте мне знать, если вы хотите, чтобы я попытался их найти.

7 голосов
/ 09 октября 2009

Если ваша цель - развить навыки C # в решении задач Эйлера, то использование библиотеки BigInt кажется бессмысленным. Если вам просто нужно значение 2 ^ 1000 как шаг к решению другой проблемы, то вот оно.

10715086071862673209484250490600018105614048117055
33607443750388370351051124936122493198378815695858
12759467291755314682518714528569231404359845775746
98574803934567774824230985421074605062371141877954
18215304647498358194126739876755916554394607706291
4571196477686542167660429831652624386837205668069376
4 голосов
/ 09 октября 2009

System.Numerics.BigInteger, если вы используете .net 4.0 (VS 2010)

Или поищите в сети хорошую bigint реализацию - есть из чего выбирать.

См. Также этот вопрос StackOverflow .

1 голос
/ 01 августа 2016

Я знаю, что этот вопрос довольно старый, но он все еще найден Google. У меня была та же проблема, я искал библиотеку для вычисления с большими (или маленькими) числами, которые не могут быть представлены стандартными типами данных.

Итак, я создал новый тип данных с именем EDecimal. С этим типом данных вы можете рассчитывать с числами произвольного размера и точности. Неважно, имеет ли номер 10 цифр или 1000000.

Просто посмотрите на https://github.com/anakonda3000/HyperMath/

1 голос
/ 09 октября 2009

Если вы можете использовать IronRuby (не уверен, насколько он применим в данный момент), он имеет неявное преобразование в Bignum. Пример:

2 ** 1000 дает: 107150860718626732094842504906000181056140...

1 голос
/ 09 октября 2009

Вы можете просто использовать F # для тестирования, это будет работать в VS2008, но для производственного приложения это будет проблемой.

Посмотрите на проблему № 25, http://blogs.msdn.com/mpeck/archive/2009/04/01/solving-problems-in-c-and-f-part-2.aspx,, поскольку она покажет подход, который вы можете использовать.

Ваше приложение C # может вызывать класс F #, они работают вместе.

1 голос
/ 09 октября 2009

Вы можете использовать массив для хранения ваших цифр. Я знаю, что это грязно, но, по сути, вам придется программировать умножение, как если бы вы делали это вручную, за исключением вашего кода.

0 голосов
/ 09 октября 2009

Вы можете добавить ссылку на среду выполнения Java (C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ vjslib.dll - это то, что у меня есть) и using java.math, вы получите BigInteger

0 голосов
/ 09 октября 2009

эх ..., 2 ^ 0 это 1-й бит, 2 ^ 1 это 2-й бит, ..., 2 ^ 4 это 5-й бит .... вам нужно 1000 бит для этого. Я ничего не знаю о c #, но как насчет того, чтобы вспомнить, что побитовая запись - это 999 0 с одним 1? И используйте его соответственно.

Для чего вы планируете использовать этот номер?

0 голосов
/ 09 октября 2009

Здесь есть класс, который называется BigInt

Очень полезно для такого типа проблем без .Net 4.0

...