以下BigInteger计算中的错误是什么?

Joh*_*Doe 2 java algorithm biginteger

这是我用来计算第一个数字i和第二个数字j之间所有连续数字之和的代码.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.*;

class Sum {
    public static void main(String args[] ) throws Exception {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s[] = br.readLine().split(" ");
        BigInteger i = new BigInteger(s[0]);
        BigInteger j = new BigInteger(s[1]);
        //I am taking the average of the first number and the last number, and multiplying by the number of numbers i.e. Sum = ((i+j)/2)(j - i)
        BigInteger k = i.add(j);
        BigInteger m = k.divide(BigInteger.valueOf(2));
        k = m.multiply(j.subtract(i));

        System.out.println(k);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是对于输入

输入

99 1000000000000

我得到了输出

499999999999499999995149

而不是正确的输出

500000000000499999995149

哪里错了?

Ima*_*man 8

你的代码是正确的,问题是你输入一个奇数和一个偶数,这使得k在k = i.add(j)一个奇数中,不能被截断而不能截断!

所以m in BigInteger m = k.divide(BigInteger.valueOf(2));是圆形的,这使得你的计算中有1个单位的变化.

只需看看正确的答案,并将其与您的程序打印出来的答案进行比较.你有一个1*1000000000000(第二个输入值)偏差.哪个问题本身.

如果您输入两个偶数或两个奇数,您的程序将工作并打印正确的答案.

我希望这足以让你找到一种方法来纠正你的程序,以防偶数和奇数作为输入.