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)
你可以在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
.