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
哪里错了?
你的代码是正确的,问题是你输入一个奇数和一个偶数,这使得k在k = i.add(j)一个奇数中,不能被截断而不能截断!
所以m in BigInteger m = k.divide(BigInteger.valueOf(2));是圆形的,这使得你的计算中有1个单位的变化.
只需看看正确的答案,并将其与您的程序打印出来的答案进行比较.你有一个1*1000000000000(第二个输入值)偏差.哪个问题本身.
如果您输入两个偶数或两个奇数,您的程序将工作并打印正确的答案.
我希望这足以让你找到一种方法来纠正你的程序,以防偶数和奇数作为输入.