【问题标题】:Manipulating BigIntegers in Java在 Java 中操作 BigInteger
【发布时间】:2014-12-21 21:29:20
【问题描述】:

我一直在编写一个 java 程序,我需要在其中计算大量值并将其存储到数组中。到目前为止,我通过将输入的变量插入指数函数来获得值:

Math.pow(7,x);

我决定将值存储到 BigInteger 数组中,但我不知道如何使用 BigInteger 提供的构造函数存储这些常规操作值。对于 'x' 值,我实际上使用了相当大的数字,它们在 longs 可以存储的范围内启动指定的值。我似乎对我想到的每一个解决方案都做了一个完整的循环......只是做:

bigArray[i] = new BigInteger((long)Math.pow(7,x));

不起作用,因为我将大于 100 的值作为 x 处理。我能做什么?

【问题讨论】:

    标签: java biginteger


    【解决方案1】:

    BigInteger bi = BigInteger.valueOf(7).pow(x);
    

    【讨论】:

      【解决方案2】:

      aioobe 的回答已经提供,建议使用 BigInteger.valueOf 是正确的,但我想提供一些额外的信息。

      正如他所说:

      BigInteger bi = BigInteger.valueOf(7).pow(x);
      

      但是让我们也看看关于“valueOf()”方法的 Java 文档:

      “这个“静态工厂方法”优先于(长)构造函数提供,因为它允许重用经常使用的 BigInteger。”

      见:http://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html#valueOf(long)

      【讨论】:

      • 感谢您的帮助!其他信息也有帮助
      【解决方案3】:

      将字符串作为参数提供给 BigInteger 构造函数,例如

      BigInteger bigInteger = new BigInteger("1000000000000000000000000000000000000000000000000000000000000000000");
      

      你的情况

       BigInteger bigInteger = new BigInteger("7").pow(x);
      

      【讨论】:

      • 大多数反对意见是对答案的先前版本,甚至不包括 BigInteger::pow。不过,我不明白你为什么推荐使用基于 String 的构造函数。
      • 也许可以,但出于礼貌,如果您对某事投反对票,请多留一会,看看发帖人是否改进了帖子,这就是这里发生的情况。
      • @aioobe 我正在传递字符串,因为 long l = 1000000000000000000000000000000000000000000000000; 甚至不会编译,但 BigInteger bigInteger = new BigInteger("1000000000000000000000000000000000000000000000000").pow(10); 会像魅力一样工作
      • 但是 OP 并没有说任何关于大型基地的事情。他甚至以7 为例。问题是当他改变x 时,他说它高达100。这些数字都没有接近于需要基于字符串的构造函数。
      • 这都是真的。 String 构造函数也可以工作,但为了提高效率,只使用 'BigInteger.valueOf()' 构造函数就可以了。谢谢大家的帮助!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-02
      • 1970-01-01
      • 1970-01-01
      • 2016-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多