Java 返回负数的BigInteger

Java 返回负数的BigInteger,java,math,biginteger,Java,Math,Biginteger,为什么此数学对某些数字返回负数: INTX=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 为什么? 这里的这一行:

为什么此数学对某些数字返回负数:

INTX=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

为什么?

这里的这一行:

(50*x*x*x-150*x*x+400*x)/3
正在使用可能溢出的整数。如果整数达到最大值(2^31-1),它将溢出到-2^31

您需要在此处使用大整数,如下所示:

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);

你正在用整数进行乘法和除法运算,这些整数在某一点上会溢出。所以不可能做这个数学运算?如何打印很长的结果?为什么352会溢出,而500不会溢出?我正在更新我的答案,请稍等。@user2582318您可以使用
biginger
。通过使用
biginger
方法,而不是
new biginger(String)
32位有符号整数是2^31-1到-2^31。@LutzL谢谢,我忘记了符号位。