该程序首先要求用户给出赋值给变量 n
的值,然后将提示用户提交n次数的长数字 . 然后将数字存储到初始化数组( ar
)中 . 我试图创建 aVeryBigSum
的函数是遍历数组中的数字,通过数组中的数字递增 sum=0
以提供总和(Java) .
但是,由于某种原因,该程序有效,除非我使用两个连续数字超过9位数 .
例如:
aVeryBigSum(2,[111111111,111111111])
在数组中有2个和2个9位数字
输出:
22222222
aVeryBigSum(2,[1111111111,1111111111])
在数组输出中有2个和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);
}
}
2 回答
你的问题就在于此
它应该读
当整数之和超过32位时,您将触发整数溢出 .
是的,同意Mad Physicist . 你必须使用
long sum = 0
. 但要完全正确,你有可能得到大于Long.MAX_VALUE
的总和 . 你可以用例如BigDecimal
: