计算非常大的整数

时间:2009-10-09 14:35:13

标签: c# math biginteger

我正在尝试使用c#计算2 ^ 1000(2到1000的幂)。我需要所有地方的价值。我一直在摸不着头脑,因为我似乎无法找到在c#中实现这一目标的方法。

是否存在某种类型,可存储300多位数字,我缺少? :)

由于

10 个答案:

答案 0 :(得分:18)

是的,但仅限于.NET 4.0 - System.Numerics.BigInteger

如果你可以使用.NET 4.0,那我就去做吧。否则,我确信周围有第三方库。如果您希望我尝试找一些,请告诉我。

答案 1 :(得分:7)

如果您的目标是在Euler问题上运用C#技能,那么使用BigInt库似乎毫无意义。如果您只需要2 ^ 1000的值作为解决另一个问题的一个步骤,那么它就是。

10715086071862673209484250490600018105614048117055
33607443750388370351051124936122493198378815695858
12759467291755314682518714528569231404359845775746
98574803934567774824230985421074605062371141877954
18215304647498358194126739876755916554394607706291
4571196477686542167660429831652624386837205668069376

答案 2 :(得分:4)

System.Numerics.BigInteger如果你在.net 4.0(VS 2010)

或者,在网络上寻找一个良好的bigint实施 - 有很多可供选择。

另见this StackOverflow question

答案 3 :(得分:1)

您可以使用数组来存储您的数字。我知道它很乱,但基本上你必须像手动那样编程乘法,除了你的代码。

答案 4 :(得分:1)

您可以使用F#来测试它,因为它可以在VS2008中运行,但对于生产应用程序来说,这将是一个问题。

查看问题#25,http://blogs.msdn.com/mpeck/archive/2009/04/01/solving-problems-in-c-and-f-part-2.aspx,因为它将显示您可以使用的方法。

您的C#应用​​程序可以调用F#类,它们可以一起工作。

答案 5 :(得分:1)

如果你可以使用IronRuby(不确定目前有多可用),它会隐式转换为Bignum。例如:

2 ** 1000给出: 107150860718626732094842504906000181056140...

答案 6 :(得分:1)

我知道这个问题已经很老了,但谷歌仍然可以找到它。 我遇到了同样的问题,我正在寻找一个用大数(或小数)计算的数据库,这些数字无法用标准数据类型表示。

所以我创建了一个名为EDecimal的新数据类型。使用此数据类型,您可以使用任意大小和精度的数字进行计算。如果数字有10位数或1000000则无关紧要。

只需查看https://github.com/anakonda3000/HyperMath/

即可

答案 7 :(得分:0)

这里有一堂课 BigInt

对于没有.Net 4.0的那类问题非常有用

答案 8 :(得分:0)

呃...,2 ^ 0是第1位,2 ^ 1是第2位,...,2 ^ 4是第5位....你需要1000位。我对c#一无所知,但是,只记得按位表示法是999 0,一个1?并相应地使用它。

您打算将这个号码用于什么?

答案 9 :(得分:0)

你可以添加对Java运行时的引用(C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ vjslib.dll就是我得到的)和using java.math,你得到一个{{ 1}}