BigInteger返回负数

时间:2014-06-14 19:21:05

标签: 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);

结果 - > 714612600

但如果我使用352

结果 - > -710900565

对于x = 500 - > 639244234

为什么?

1 个答案:

答案 0 :(得分:5)

这一行:

(50*x*x*x-150*x*x+400*x)/3

使用可能溢出的整数。如果一个整数达到最大值(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);