BigInteger返回负数

use*_*318 -2 java math biginteger

为什么这个数学返回一些数字的负数:

int x = 351;

    String bigValue= ((50*x*x*x-150*x*x+400*x)/3) + "";
    BigInteger resultInteger = new BigInteger(bigValue);
    System.out.println(resultInteger);
Run Code Online (Sandbox Code Playgroud)

结果 - > 714612600

但如果我使用352

结果 - > -710900565

对于x = 500 - > 639244234

为什么?

Anu*_*oob 5

这一行在这里:

(50*x*x*x-150*x*x+400*x)/3
Run Code Online (Sandbox Code Playgroud)

使用整数,可以溢出.如果一个整数达到最大值(2 ^ 31-1),它将溢出到-2 ^ 31.

你需要在这里使用BigIntegers,如下所示:

Biginteger bx = new BigInteger(x);
BigInteger new BigInteger(50).multiply(bx.pow(3)).multiply(new BigInteger(-150))
    .multiply(bx.pow(2)).multiply(new BigInteger(400)).multiply(bx).divide(3);
Run Code Online (Sandbox Code Playgroud)

  • @ user2582318你可以使用`BigInteger`.通过使用`BigInteger`方法,而不是`new BigInteger(String)` (2认同)