在Java中,数组通过长整数传递9位来发出增量和=0
程序首先要求用户给出一个分配给变量n
的值,然后提示用户提交n次长数字。然后,这些数字将被存储到初始化的数组中(ar
)。我试图创建aVeryBigSum
的函数是循环数组中的数字,通过数组中的数字增加sum=0
来提供总和(Java)
然而,出于某种原因,除非我使用两个大于9位的连续数字,否则该程序可以运行
例如:
aVeryBigSum(2,[111111111,111111111])
在数组中有n个2位数和两个9位数
输出:
22222222
aVeryBigSum(2,[1111111111,1111111111])
在数组中有n个2位数和两个10位数
输出:
-2072745074
知道问题是什么吗?我提供了以下程序:
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Main {
static long aVeryBigSum(int n, long[] ar) {
int sum = 0;
for (int i = 0; i < n; i++){
System.out.println(sum);
System.out.println(ar[i]);
sum += ar[i];
System.out.println(" ");
}
return sum;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
long[] ar = new long[n];
for(int ar_i = 0; ar_i < n; ar_i++){
ar[ar_i] = in.nextLong();
}
long result = aVeryBigSum(n, ar);
System.out.println(result);
}
}
# 1 楼答案
你的问题就在眼前
应该是
当整数之和超过32位时,将触发整数溢出
# 2 楼答案
是的,同意疯狂物理学家的观点。你必须使用
long sum = 0
。但是为了完全正确,你有可能得到大于Long.MAX_VALUE
的和。你可以使用例如BigDecimal
: