6

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

是否有某种类型可以存储 300+ 位长的数字,我错过了?:)

谢谢

4

10 回答 10

18

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

如果你可以使用 .NET 4.0,我会去的。否则,我确定周围有第三方库。如果你想让我试着找一些,请告诉我。

于 2009-10-09T14:37:03.467 回答
7

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

10715086071862673209484250490600018105614048117055
33607443750388370351051124936122493198378815695858
12759467291755314682518714528569231404359845775746
98574803934567774824230985421074605062371141877954
18215304647498358194126739876755916554394607706291
4571196477686542167660429831652624386837205668069376
于 2009-10-09T16:02:37.193 回答
4

System.Numerics.BigInteger 如果您使用的是 .net 4.0 (VS 2010)

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

另请参阅此 StackOverflow 问题

于 2009-10-09T14:38:08.200 回答
1

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

于 2009-10-09T14:38:30.217 回答
1

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

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

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

于 2009-10-09T14:40:57.933 回答
1

如果您可以使用 IronRuby(目前不确定它的可用性),它会隐式转换为 Bignum。例子:

2 ** 1000给出: 107150860718626732094842504906000181056140...

于 2009-10-09T14:45:52.323 回答
1

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

所以我创建了一个新的数据类型,叫做EDecimal. 使用此数据类型,您可以使用任意大小和精度的数字进行计算。数字是 10 位还是 1000000 都没有关系。

看看它在https://github.com/anakonda3000/HyperMath/

于 2016-08-01T14:04:23.157 回答
0

这里有一个类叫做 BigInt

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

于 2009-10-09T14:40:03.350 回答
0

嗯...,2^0 是第 1 位,2^1 是第 2 位,...,2^4 是第 5 位...。您需要 1000 位。我对 c# 一无所知,但是,记住按位表示法是 999 0 和一个 1 怎么样?并相应地使用它。

你打算用这个号码做什么?

于 2009-10-09T14:45:51.497 回答
0

您可以添加对 Java 运行时的引用(C:\Windows\Microsoft.NET\Framework\v2.0.50727\vjslib.dll 是我所拥有的)并且using java.math,您会得到一个BigInteger

于 2009-10-09T14:50:52.433 回答