代码之家  ›  专栏  ›  技术社区  ›  Canavar

超过C中基本类型的数字#

  •  4
  • Canavar  · 技术社区  · 15 年前

    我在解决问题 Project Euler . 大部分问题都是通过

    1. 超过乌龙的大数字,
    Ex : ulong number = 81237146123746237846293567465365862854736263874623654728568263582;
    
    1. 非常敏感的十进制数,有效位数超过30

    例如:十进制12= 0324234425435738794756936576474978265726385428569234753964340653;

    1. 数组的索引值必须超过最大int值。

    例如:bool[]items=新建 布尔[213192471235494658346583465340673475263842864836];

    我找到了一个名为intx的库来解决这个大数字。但是我想知道如何用基本的.NET类型来解决这个问题?

    谢谢你的回复!

    5 回复  |  直到 15 年前
        1
  •  8
  •   Lasse V. Karlsen    15 年前

    好吧,对于那里的第三个项目,您真的不想使用数组,因为它也需要分配这么大的空间。

    让我换个说法。

    当你能负担得起并能接触到这么多的内存时,这个大数目的问题就解决了!

    为了回答你在那里的最后一个问题,你不可能只使用基本类型来解决这个问题,除非你做了intx的制造商所做的,否则就要实现大量的支持。

    我可以建议您尝试一种不同的编程语言来解决Euler问题吗?我对python有更好的运气,因为它支持开箱即用的大量数据,并集成到其他所有东西中。好吧,除了这个数组,现在你真的不能用任何语言来做这个。

        2
  •  4
  •   Allan Simonsen    15 年前

    也许这可以给你提供解决部分问题的方法: http://www.codeproject.com/csharp/BigInteger.asp

    维基百科也有一篇关于 Arbitrary-precision math 在那篇文章中有一个到codeplex的链接 W3b.sine wich是一个任意精度实数C库。

        3
  •  2
  •   Community Egal    7 年前

    好吧,我建议你看看这个 other answer 看看我是如何解决大数问题的。基本上,你需要用另一种方式来表示数字…

        4
  •  1
  •   Pete Kirkham    15 年前

    大部分问题都是通过

    1. 超过乌龙的大数字,
    2. 非常敏感的十进制数,有效位数超过30
    3. 数组的索引值必须超过最大int值。

    大多数问题都设计为适合64位的长度。有一两个需要更大的整数,但不多。我所看到的都不需要超过30位的十进制数,也不需要超过几千个条目的数组。

    记住,问题的正确解决方案最多只需几秒钟,填充213192471235494658346583465340673475263842864836位的数组需要10^30年。

        5
  •  0
  •   peSHIr    15 年前

    另一个选项可能是使用f_中可用的bigint类型: http://cs.hubfs.net/forums/thread/887.aspx