【问题标题】:Dealing with extremely large numbers处理非常大的数字
【发布时间】:2015-03-25 23:25:43
【问题描述】:

所以我必须处理非常大的数字。实际上,确切的数字是 18,446,744,073,709,551,616,即 2^64。我想我可以把它写成 2^64,但是我会从中减去数字并除以等等,而且我的一些计算也可能在 quintillions 中。我尝试像这样在它的末尾添加“L”:

public int total = 18446744073709551616L;

但是,它仍然给我与整数太大相同的错误。我不确定这是因为我输入错误还是即使使用“L”它仍然太大。有什么解决方案吗?只要它有效,我肯定愿意花费一些处理能力或增加额外的运行时间。谢谢!

【问题讨论】:

  • 阅读BigInteger 课程。最大的long 是 2^63-1。
  • 您不能将该尺寸数字存储在int 中。你甚至不能将那个尺寸数字存储在long

标签: java int largenumber


【解决方案1】:

您可以使用java.math.BigInteger。

使用 new BigInteger("18446744073709551616") 从字符串创建 BigInteger。

您可以通过调用add、subtract、multiply、divide和mod等方法进行数学运算。您不能使用 +、-、*、/、% 运算符,因为它们仅适用于原始类型(而 + 适用于字符串)。

【讨论】:

  • 注意:您也可以使用 new BigInteger(2).pow(64) 作为 rgettman 建议的已删除答案。您不能使用new BigInteger(18446744073709551616),因为这需要将号码放入int 开头。
  • 啊,这些答案都很棒。感谢您的帮助!
  • 抱歉,我还有最后一个问题。看来我只能使用两个 BigInteger 的加法、减法和乘法之类的功能。如果我想做 total.multiply(12) 或类似的简单操作怎么办?解决这个问题的最简单方法是什么?
【解决方案2】:

我相信在您的情况下,只有 BigInteger 或 BigDecimal 将是解决方案。

【讨论】:

    猜你喜欢
    • 2013-08-05
    • 2010-10-07
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    相关资源
    最近更新 更多