在Java中,通过长整数传递9位,发出增量和=0
程序首先要求用户给出一个分配给变量在Java中,通过长整数传递9位,发出增量和=0,java,arrays,long-integer,Java,Arrays,Long Integer,程序首先要求用户给出一个分配给变量n的值,然后提示用户提交长数字n次。然后,这些数字将存储到初始化的数组中(ar)。我试图创建的函数是循环数组中的数字,通过数组中的数字递增sum=0,以提供总和(Java) 然而,出于某种原因,除非我使用两个大于9位的连续数字,否则该程序可以工作 例如: aVeryBigSum(2[111111111])在数组中有n个2位数和两个9位数 输出: 2222222 aVeryBigSum(2[11111111111])在数组中有n个2和两个10位数字 输出: -20
n
的值,然后提示用户提交长数字n次。然后,这些数字将存储到初始化的数组中(ar
)。我试图创建的函数是循环数组中的数字,通过数组中的数字递增sum=0
,以提供总和(Java)
然而,出于某种原因,除非我使用两个大于9位的连续数字,否则该程序可以工作
例如:
aVeryBigSum(2[111111111])
在数组中有n个2位数和两个9位数
输出:
2222222
aVeryBigSum(2[11111111111])
在数组中有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);
}
}
import java.text.*;
导入java.math.*;
导入java.util.regex.*;
公共班机{
静态long aVeryBigSum(int n,long[]ar){
整数和=0;
对于(int i=0;i
你的问题就在眼前
int sum = 0;
应该是
long sum = 0;
当整数之和超过32位时,将触发整数溢出。是的,同意Mad Physicast的说法。您必须使用
长和=0
。但是为了完全正确,您有可能使sum大于Long.MAX\u值
。您可以使用例如BigDecimal
:
static BigDecimal aVeryBigSum(int n, long[] ar) {
BigDecimal sum = BigDecimal.ZERO;
for (int i = 0; i < n; i++) {
System.out.println(sum);
System.out.println(ar[i]);
sum = sum.add(new BigDecimal(ar[i]));
System.out.println(" ");
}
return sum;
}
static BigDecimal aVeryBigSum(int n,long[]ar){
BigDecimal总和=BigDecimal.0;
对于(int i=0;i
或类似内容。@johnnymop。看起来更像是基本整数溢出。可能是@johnnymop的重复。代码中没有下一行。或者是以下两行之一:/