范围"a"到"b"之间的整数之和对于大输入给出错误的结果

ful*_*per -1 java math multiplication

为什么下面的代码没有给出预期的输出?在这里,我期待"a"和"b"范围之间的所有整数之和.虽然它适用于一些小输入.如果使用的逻辑是错误的或其他一些事情是错误的?

class RangeSum {
    public static void main(String args[] ){

       // BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        long i = Long.valueOf("99");
        long j = Long.valueOf("1000000000000");
        long ans = 0L;
        /*if(i<0 || i>Math.pow(10, 18)){
            //throw new Exception("Wroong Input.");
        }
        if(i<0 || i>Math.pow(10, 18)){
            //throw new Exception("Wroong Input.");
        }*/
        if (j>i){
             long sumTill_j = (j*(j+1))/2;
             long sumTill_i = ((i-1)*i)/2;
             ans = sumTill_j - sumTill_i;
             System.out.println(ans);
        }else{
             long sumTill_i = (i*(i+1))/2;
             long sumTill_j = ((j-1)*j)/2;           
             ans = sumTill_i - sumTill_j;
             System.out.println(ans);
        }   
    }
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*n C 5

你可以在a中表示的最大可能数long是2 63 - 1,大约是9.2 x 10 18.如果您的计算超过了该计算,则计算将溢出而不会抛出任何异常,您将得到错误的答案.

在你的情况下:

1,000,000,000,000 * (1,000,000,000,000 + 1) / 2
Run Code Online (Sandbox Code Playgroud)

如果我的心算是正确的,大概是5 x 10 23.那会溢出来.


解决方案:使用BigInteger.